स्तंभ नाम खोजें जिसमें प्रत्येक पंक्ति के लिए अधिकतम मूल्य है


122

मेरे पास इस तरह एक DataFrame है:

In [7]:
frame.head()
Out[7]:
Communications and Search   Business    General Lifestyle
0   0.745763    0.050847    0.118644    0.084746
0   0.333333    0.000000    0.583333    0.083333
0   0.617021    0.042553    0.297872    0.042553
0   0.435897    0.000000    0.410256    0.153846
0   0.358974    0.076923    0.410256    0.153846

यहां, मैं पूछना चाहता हूं कि कॉलम नाम कैसे प्राप्त किया जाए, जिसमें प्रत्येक पंक्ति के लिए अधिकतम मूल्य हो, वांछित आउटपुट इस प्रकार है:

In [7]:
    frame.head()
    Out[7]:
    Communications and Search   Business    General Lifestyle   Max
    0   0.745763    0.050847    0.118644    0.084746           Communications 
    0   0.333333    0.000000    0.583333    0.083333           Business  
    0   0.617021    0.042553    0.297872    0.042553           Communications 
    0   0.435897    0.000000    0.410256    0.153846           Communications 
    0   0.358974    0.076923    0.410256    0.153846           Business 

जवाबों:


164

आप उपयोग कर सकते हैं idxmaxके साथ axis=1प्रत्येक पंक्ति पर सबसे बड़ा मूल्य के साथ स्तंभ को खोजने के लिए:

>>> df.idxmax(axis=1)
0    Communications
1          Business
2    Communications
3    Communications
4          Business
dtype: object

नया कॉलम 'मैक्स' बनाने के लिए, उपयोग करें df['Max'] = df.idxmax(axis=1)

पंक्ति सूचकांक को खोजने के लिए जिस पर प्रत्येक कॉलम में अधिकतम मूल्य होता है, उपयोग df.idxmax()(या समकक्ष df.idxmax(axis=0))।


@SushantKulkarni आपने शीर्ष -1 के बजाय शीर्ष -3 संभावनाएँ प्राप्त करने का प्रबंधन कैसे किया?
स्टेरिजियो

# सभी खातों के लिए कम्प्यूटिंग संभावनाएं = lr.predict_proba (tfidf) MLR_y_p = pd.DataFrame (proba, column = np.unique (y), index / df.Key.tolist ())
सुशांत कुलकर्णी

25

और यदि आप अधिकतम मान के साथ कॉलम के नाम वाले कॉलम का उत्पादन करना चाहते हैं, लेकिन केवल कॉलम के सबसेट को देखते हुए, तो आप @ ajcr के उत्तर की भिन्नता का उपयोग करते हैं:

df['Max'] = df[['Communications','Business']].idxmax(axis=1)

5
यदि आप एक उपसेट को छोड़कर सभी स्तंभों को बाहर करना चाहते हैंdf['Max'] = df[df.columns.difference(['Foo','Bar'])].idxmax(axis=1)
अस्थायी

9

आप applyडेटाफ़्रेम पर और argmax()प्रत्येक पंक्ति के माध्यम से प्राप्त कर सकते हैंaxis=1

In [144]: df.apply(lambda x: x.argmax(), axis=1)
Out[144]:
0    Communications
1          Business
2    Communications
3    Communications
4          Business
dtype: object

यहाँ तुलना करने के लिए धीमी गति से एक बेंचमार्क है applyविधि करने के लिए है idxmax()के लिएlen(df) ~ 20K

In [146]: %timeit df.apply(lambda x: x.argmax(), axis=1)
1 loops, best of 3: 479 ms per loop

In [147]: %timeit df.idxmax(axis=1)
10 loops, best of 3: 47.3 ms per loop
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.