Используйте DataFrame.agg
для вызова dropna
и tolist
:
df.agg(lambda x: x.dropna().tolist(), axis=1)
0 [a, b]
1 [c, d, e]
2 [f, g]
dtype: object
Если вам нужна вместо этого строка, разделенная запятыми, используйте str.cat
или str.join
:
df.agg(lambda x: x.dropna().str.cat(sep=','), axis=1)
# df.agg(lambda x: ','.join(x.dropna()), axis=1)
0 a,b
1 c,d,e
2 f,g
dtype: object
Если важна производительность, я рекомендую использовать понимание списка:
df['output'] = [x[pd.notna(x)].tolist() for x in df.values]
df
col1 col2 col3 output
0 a NaN b [a, b]
1 c d e [c, d, e]
2 f g NaN [f, g]
Это работает, потому что ваш DataFrame состоит из строк.Для получения дополнительной информации о том, когда петли подходят для использования с пандами, см. Это обсуждение: Для петель с пандами - Когда мне следует позаботиться?