2017-08-22 10 views
8

कई स्तंभों में संग्रहीत सूचियों के साथ एक पांडस डेटाफ्रेम दिया गया है, क्या कॉलम नाम ढूंढने का एक आसान तरीका है जिसमें प्रत्येक पंक्ति के लिए सबसे लंबी सूची है?पांडस डीएफ में कॉलम का नाम ढूंढें जिसमें सबसे लंबी सूची

उदाहरण के लिए

, इस डेटा के साथ:

      positive     negative   neutral 
1 [marvel, moral, bold, destiny]      [] [view, should] 
2      [beautiful]  [complicated, need]    [] 
3      [celebrate] [crippling, addiction]   [big] 

मैं पंक्ति 1 और "नकारात्मक" पंक्ति 2 के लिए और 3

मैं के लिए सबसे लंबे समय तक सूची के साथ स्तंभ के रूप में "सकारात्मक" की पहचान करना चाहते सोचा कि मैं कॉलम नाम प्राप्त करने के लिए सूची लंबाई और idmax() की गणना करने के लिए str.len() का उपयोग कर सकता हूं, लेकिन यह समझ नहीं सकता कि उन्हें कैसे गठबंधन किया जाए।

उत्तर

15

IIUC:

In [227]: df.applymap(len).idxmax(axis=1) 
Out[227]: 
0 positive 
1 negative 
2 negative 
dtype: object 
+0

इस बात के लिए बहुत-बहुत धन्यवाद! त्वरित अनुवर्ती: 'idxmax()' पहली सूचकांक (यानी 'सकारात्मक') देता है जब 'सकारात्मक', 'नकारात्मक' और 'तटस्थ' सभी खाली सूचियां होती हैं। क्या इस समाधान को ऐसी पंक्तियों को अनदेखा करने के लिए संशोधित किया जा सकता है? मैंने खाली सूचियों को नाएन के साथ बदलने की कोशिश की है, लेकिन 'लेन' शिकायत करते हैं: '' प्रकार की वस्तु 'फ्लोट' की कोई लेंस नहीं है() "'। – user2950747

+0

@ user2950747, क्या आप एक पुन: उत्पादित डेटा सेट प्रदान कर सकते हैं? – MaxU

+0

[यह नमूना डेटा] (http://www.sharecsv.com/s/9dcf95cd39fa09eec291085eafecbd0c/polarity.csv) अंत में तीसरी पंक्ति में खाली सूचियां हैं, और 'idxmax() 'द्वारा' पॉजिटिव 'लेबल किया जाएगा। – user2950747

5
>>> df.apply(lambda row: row.apply(len).argmax(), axis=1) 
0 positive 
1 negative 
2 negative 
dtype: object 
2

या आप इस कोशिश कर सकते हैं ...

df=df.reset_index() 
DF=pd.melt(df,id_vars=['index']) 
DF['Length']=DF['value'].apply(lambda x : len(x)) 
DF.sort_values(['index','Length']).drop_duplicates(subset=['index'],keep='last') 
संबंधित मुद्दे