在包含最长列表的Pandas DF中查找列的名称

时间:2017-08-22 21:24:17

标签: python python-3.x pandas

鉴于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()来获取列名称,但无法弄清楚如何合并它们。

3 个答案:

答案 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')