3 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
使用DataFrame.agg調(diào)用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]
這是有效的,因?yàn)槟?DataFrame 由字符串組成。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
使用 for 循環(huán)
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]

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
試試這個(gè):
df['output'] = df.apply(lambda x: x.dropna().to_list(), axis=1)
添加回答
舉報(bào)