如何从Python数据框的多个列中选择所有非NULL值

时间:2018-09-08 03:39:45

标签: python pandas

我有一个如下所示的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

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要将'Nan'更改为np.nan,然后将stackgroupby 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解决方案要快一些。