में उपसमूहों में पंक्तियों को रैंक करने का तेज़ तरीका मेरे पास एक पांडा डेटा फ्रेम है जो विभिन्न उपसमूहों से बना है।पांडा डेटाफ्रेम
df = pd.DataFrame({
'id':[1, 2, 3, 4, 5, 6, 7, 8],
'group':['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'],
'value':[.01, .4, .2, .3, .11, .21, .4, .01]
})
मैं अपने समूह में प्रत्येक आईडी का रैंक ढूंढना चाहता हूं, कम मूल्य बेहतर है। उपर्युक्त उदाहरण में, समूह ए में, आईडी 1 में 1 रैंक होगा, आईडी 2 का रैंक 4 होगा। समूह बी में, आईडी 5 में 2 रैंक होगा, आईडी 8 के पास रैंक 1 होगा और इसलिए पर। मान के अनुसार सॉर्ट
:
अभी मैं द्वारा रैंक का आकलन।
df.sort('value', ascending = True, inplace=True)
एक स्थान रखनेवाला समारोह बनाएं
def ranker(df): df['rank'] = np.arange(len(df)) + 1 return df
(यह पहले से ही हल कर चर मान लिया गया है) अलग से प्रत्येक समूह पर स्थान रखनेवाला समारोह लागू करें:
df = df.groupby(['group']).apply(ranker)
यह प्रक्रिया काम करती है लेकिन जब मैं इसे डेटा की लाखों पंक्तियों पर चलाता हूं तो यह वास्तव में धीमा होता है। क्या किसी के पास कोई तेज़ रैंकर फ़ंक्शन बनाने के बारे में कोई विचार है।
बेशक! इसके लिए एक समारोह है! उस ने कहा, यह मेरे कार्य के ऊपर जैसा ही नहीं है क्योंकि यदि मानों में कोई टाई है, तो मेरा फ़ंक्शन यादृच्छिक रूप से एक आईडी को एक ही आईडी के साथ एक और आईडी के मुकाबले उच्च रैंक देगा। यद्यपि .rank() के समान मानों को संभालने का तरीका समझदार है, मेरे उद्देश्यों के लिए, मुझे अपने फ़ंक्शन द्वारा उत्पादित आउटपुट की आवश्यकता है। आपकी सहायताके लिए धन्यवाद! –
मैंने एक विकल्प के साथ अद्यतन किया। – Jeff