এই প্রশ্নটি কয়েক বছর পুরনো, এবং গৃহীত উত্তরটি দুর্দান্ত তবে আমার মনে হয় নিম্নলিখিতটি এখনও উল্লেখ করার মতো worth আপনি যদি নির্ভরতা আপত্তি না করেন তবে আপনি scipy
ব্যবহার করতে পারেন scipy.stats.rankdata
:
In [22]: from scipy.stats import rankdata
In [23]: a = [4, 2, 7, 1]
In [24]: rankdata(a)
Out[24]: array([ 3., 2., 4., 1.])
In [25]: (rankdata(a) - 1).astype(int)
Out[25]: array([2, 1, 3, 0])
এর একটি দুর্দান্ত বৈশিষ্ট্য rankdata
হ'ল method
যুক্তিটি সম্পর্কগুলি পরিচালনা করার জন্য বিভিন্ন বিকল্প সরবরাহ করে। উদাহরণস্বরূপ, সেখানে 20 টির তিনটি ঘটনা এবং 40 টির মধ্যে দুটি ঘটনা রয়েছে b
:
In [26]: b = [40, 20, 70, 10, 20, 50, 30, 40, 20]
ডিফল্ট বাঁধা মানগুলিতে গড় র্যাঙ্ক নির্ধারণ করে:
In [27]: rankdata(b)
Out[27]: array([ 6.5, 3. , 9. , 1. , 3. , 8. , 5. , 6.5, 3. ])
method='ordinal'
একটানা পদে নিয়োগ দেয়:
In [28]: rankdata(b, method='ordinal')
Out[28]: array([6, 2, 9, 1, 3, 8, 5, 7, 4])
method='min'
সমস্ত বাঁধা মানগুলিতে বাঁধা মানগুলির সর্বনিম্ন র্যাঙ্ক বরাদ্দ করে:
In [29]: rankdata(b, method='min')
Out[29]: array([6, 2, 9, 1, 2, 8, 5, 6, 2])
আরও বিকল্পের জন্য ডকাস্ট্রিং দেখুন।
ranks = temp.argsort()
।