Найдите имя столбца в DF Pandas, который содержит самый длинный список
Имея Pandas DataFrame со списками, хранящимися в нескольких столбцах, существует ли простой способ найти имя столбца, который содержит самый длинный список для каждой строки?
Например, с этими данными:
positive negative neutral
1 [marvel, moral, bold, destiny] [] [view, should]
2 [beautiful] [complicated, need] []
3 [celebrate] [crippling, addiction] [big]
Я хочу идентифицировать "положительный" как столбец с самым длинным списком для строки 1 и "отрицательный" для строк 2 и 3.
Я думал, что мог бы использовать str.len()
рассчитать длину списка и idmax()
чтобы получить имена столбцов, но не могу понять, как их объединить.
3 ответа
Решение
IIUC:
In [227]: df.applymap(len).idxmax(axis=1)
Out[227]:
0 positive
1 negative
2 negative
dtype: object
>>> df.apply(lambda row: row.apply(len).argmax(), axis=1)
0 positive
1 negative
2 negative
dtype: object
Или вы можете попробовать это...
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')