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

问题描述 投票:0回答:2

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

谢谢!

python pandas
2个回答
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
投票

修复nans之后:

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解决方案要快一些,至少对于发布的数据集而言。

© www.soinside.com 2019 - 2024. All rights reserved.