3 回答
TA贡献1875条经验 获得超5个赞
使用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 由字符串组成。
TA贡献1853条经验 获得超9个赞
使用 for 循环
df['New']=[[y for y in x if y == y ] for x in df.values.tolist()]
df
Out[654]:
col1 col2 col3 New
0 a NaN b [a, b]
1 c d e [c, d, e]
2 f g NaN [f, g]
或stack与groupby
df['New']=df.stack().groupby(level=0).agg(list)
df
Out[659]:
col1 col2 col3 New
0 a NaN b [a, b]
1 c d e [c, d, e]
2 f g NaN [f, g]
添加回答
举报