鉴于Pandas DataFrame的列表存储在多个列中,是否有一种简单的方法可以找到包含每行最长列表的列名?
例如,使用此数据:
positive negative neutral
1 [marvel, moral, bold, destiny] [] [view, should]
2 [beautiful] [complicated, need] []
3 [celebrate] [crippling, addiction] [big]
我想确定"积极"作为第1行和第34行的最长列表的列;负数"第2行和第3行。
我认为我可以使用str.len()
来计算列表长度,使用idmax()
来获取列名称,但无法弄清楚如何合并它们。
答案 0 :(得分:15)
IIUC:
In [227]: df.applymap(len).idxmax(axis=1)
Out[227]:
0 positive
1 negative
2 negative
dtype: object
答案 1 :(得分:5)
>>> df.apply(lambda row: row.apply(len).argmax(), axis=1)
0 positive
1 negative
2 negative
dtype: object
答案 2 :(得分: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')