我有一个如下的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
谢谢!
你需要将'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)
修复nan
s之后:
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
解决方案要快一些,至少对于发布的数据集而言。