我有一个如下所示的DataFrame:
column-a column-b column-c
0 Nan A B
1 A Nan C
2 Nan Nan C
3 A B C
我希望创建一个新的D列以捕获从A列到C列的所有非NULL值:
column d
0 A,B
1 A,C
2 C
3 A,B,C
谢谢!
答案 0 :(得分:2)
您需要将'Nan'
更改为np.nan
,然后将stack
与groupby
join
一起使用
df=df.replace('Nan',np.nan)
df.stack().groupby(level=0).agg(','.join)
Out[570]:
0 A,B
1 A,C
2 C
3 A,B,C
dtype: object
#df['column-d']= df.stack().groupby(level=0).agg(','.join)
答案 1 :(得分:1)
修复nan
之后:
df = df.replace('Nan', np.nan)
收集列表中每一行中的所有非空值,并加入列表项。
df['column-d'] = df.apply(lambda x: ','.join(x[x.notnull()]), axis=1)
#0 A,B
#1 A,C
#2 C
#3 A,B,C
令人惊讶的是,至少对于发布的数据集,此解决方案比Wen的stack/groupby
解决方案要快一些。