Найдите имя столбца в 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')
Другие вопросы по тегам