पांडा idxmax
समारोह का उपयोग करें । यह सीधा है:
>>> import pandas
>>> import numpy as np
>>> df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
>>> df
A B C
0 1.232853 -1.979459 -0.573626
1 0.140767 0.394940 1.068890
2 0.742023 1.343977 -0.579745
3 2.125299 -0.649328 -0.211692
4 -0.187253 1.908618 -1.862934
>>> df['A'].argmax()
3
>>> df['B'].argmax()
4
>>> df['C'].argmax()
1
वैकल्पिक रूप से आप भी उपयोग कर सकते हैं numpy.argmax
, जैसे कि numpy.argmax(df['A'])
- यह एक ही चीज़ प्रदान करता है, और कम से कम उतनी ही तेजी से दिखाई देता है जितना idxmax
कि सरसरी टिप्पणियों में।
idxmax()
इंडेक्स लेबल लौटाता है, पूर्णांक नहीं।
- उदाहरण ': यदि आपके स्ट्रिंग मान आपके इंडेक्स लेबल के रूप में हैं, जैसे पंक्तियाँ' a '' e 'के माध्यम से, तो आप जानना चाह सकते हैं कि अधिकतम पंक्ति 4 में होता है (पंक्ति' d 'नहीं)।
- अगर आप चाहते हैं कि
Index
आपके भीतर उस लेबल की पूर्णांक स्थिति इसे मैन्युअल रूप से प्राप्त हो (जो अब मुश्किल हो सकती है कि डुप्लिकेट पंक्ति लेबल की अनुमति हो)।
रासायनिक नोट:
idxmax()
0.11 से पहले कहा जाता argmax()
था
argmax
1.0.0 से पहले हटा दिया गया था और पूरी तरह से 1.0.0 में हटा दिया गया था
- पंडों के रूप में वापस 0.16,
argmax
एक ही फ़ंक्शन को मौजूद करने और प्रदर्शन करने के लिए उपयोग किया जाता था (हालांकि अधिक धीमी गति से चलाने के लिए दिखाई दिया था idxmax
)।
argmax
फ़ंक्शन अधिकतम तत्व की पंक्ति स्थान के सूचकांक के भीतर पूर्णांक स्थिति लौटाता है।
- पांडा पूर्णांक सूचकांकों के बजाय पंक्ति लेबल का उपयोग करने के लिए चले गए। स्थितीय पूर्णांक सूचकांकों का प्रयोग लेबल की तुलना में बहुत सामान्य, सामान्य रूप से किया जाता था, विशेषकर उन अनुप्रयोगों में जहां डुप्लिकेट पंक्ति लेबल आम हैं।
उदाहरण के लिए, DataFrame
डुप्लिकेट पंक्ति लेबल वाले इस खिलौने पर विचार करें :
In [19]: dfrm
Out[19]:
A B C
a 0.143693 0.653810 0.586007
b 0.623582 0.312903 0.919076
c 0.165438 0.889809 0.000967
d 0.308245 0.787776 0.571195
e 0.870068 0.935626 0.606911
f 0.037602 0.855193 0.728495
g 0.605366 0.338105 0.696460
h 0.000000 0.090814 0.963927
i 0.688343 0.188468 0.352213
i 0.879000 0.105039 0.900260
In [20]: dfrm['A'].idxmax()
Out[20]: 'i'
In [21]: dfrm.iloc[dfrm['A'].idxmax()] # .ix instead of .iloc in older versions of pandas
Out[21]:
A B C
i 0.688343 0.188468 0.352213
i 0.879000 0.105039 0.900260
तो यहाँ का एक भोली उपयोग idxmax
पर्याप्त नहीं है, जबकि पुराना रूप argmax
सही तरीके से अधिकतम पंक्ति की स्थिति (इस मामले में, स्थिति 9) प्रदान करेगा।
यह डायनेमिक रूप से टाइप की जाने वाली भाषाओं में बग-प्रवण व्यवहारों में से एक है जो इस तरह की बात को इतना दुर्भाग्यपूर्ण बनाता है, और एक मरे हुए घोड़े को मारने के लायक है। यदि आप सिस्टम कोड लिख रहे हैं और आपका सिस्टम अचानक कुछ डेटा सेटों पर उपयोग हो जाता है, जो जुड़ने से पहले ठीक से साफ नहीं होते हैं, तो डुप्लिकेट पंक्ति लेबलों के साथ समाप्त करना बहुत आसान है, विशेष रूप से वित्तीय संपत्तियों के लिए CUSIP या SEDOL पहचानकर्ता जैसे स्ट्रिंग लेबल। आप आसानी से आपकी मदद करने के लिए प्रकार प्रणाली का उपयोग नहीं कर सकते हैं, और आप अप्रत्याशित रूप से लापता डेटा में चलने के बिना सूचकांक पर विशिष्टता को लागू करने में सक्षम नहीं हो सकते हैं।
इसलिए आप इस उम्मीद के साथ रह गए हैं कि आपकी यूनिट के परीक्षण में सब कुछ शामिल है (वे नहीं किया था, या अधिक होने की संभावना नहीं है कि किसी ने कोई परीक्षण नहीं लिखा है) - अन्यथा (सबसे अधिक संभावना है) आप अभी इंतजार कर रहे हैं कि क्या आप इस में स्मैक करते हैं रनटाइम में त्रुटि, जिस स्थिति में आपको संभवतः डेटाबेस से कई घंटे काम के लायक छोड़ना पड़ता है जिसके परिणामस्वरूप आप परिणाम प्राप्त कर रहे थे, IPython में दीवार के खिलाफ अपना सिर धमाके से समस्या को मैन्युअल रूप से पुन: उत्पन्न करने की कोशिश कर रहा था, अंत में यह idxmax
समझ में आया कि यह केवल इसलिए है अधिकतम पंक्ति के लेबल की रिपोर्ट करें , और फिर निराश हो रहे हैं कि कोई भी मानक फ़ंक्शन स्वचालित रूप से आपके लिए अधिकतम पंक्ति की स्थिति प्राप्त नहीं करता है, अपने आप को एक छोटी गाड़ी कार्यान्वयन लिख रहा है, कोड को संपादित कर रहा है, और प्रार्थना करता है कि आप फिर से समस्या में न दौड़ें।