熊猫合并列以使用逗号分隔值创建新列

Posted

技术标签:

【中文标题】熊猫合并列以使用逗号分隔值创建新列【英文标题】:pandas merge columns to create new column with comma separated values 【发布时间】:2019-05-28 16:12:56 【问题描述】:

我的数据框有四列颜色。我想将它们组合成一个名为“颜色”的列,并使用逗号分隔值。

例如,我正在尝试像这样组合成一个颜色列:

ID  Black Red  Blue  Green  Colors   
120 NaN   red  NaN   green  red, green  
121 black Nan  blue  NaN    black, blue

我的代码是:

df['Colors'] = df[['Black, 'Red', 'Blue', 'Green']].apply(lambda x: ', '.join(x), axis=1)

但是 ID 120 的输出是: , 红, , 绿

ID 121 的输出是: 黑色, , 蓝色,

发现我的问题! 在我的代码前面,我将“None”替换为“”而不是 NaN。进行更改后,加上反馈以插入 [x.notnull()],它就可以工作了!

df['Black'].replace('None', np.nan, inplace=True)
df['Colors'] = df[['Black, 'Red', 'Blue', 'Green']].apply(lambda x: ', '.join(x[x.notnull()]), axis=1)

【问题讨论】:

【参考方案1】:

使用dot

s=df.iloc[:,1:]
s.notnull()
   Black   Red   Blue  Green
0  False  True  False   True
1   True  True   True  False
s.notnull().dot(s.columns+',').str[:-1]
0         Red,Green
1    Black,Red,Blue
dtype: object

df['color']=s.notnull().dot(s.columns+',').str[:-1]

【讨论】:

【参考方案2】:

你只需要处理 NaNs

df['Colors'] = df[['Black', 'Red', 'Blue', 'Green']].apply(lambda x: ', '.join(x[x.notnull()]), axis = 1)

    ID      Black   Red Blue    Green   Colors
0   120     NaN     red NaN     green   red, green
1   121     black   NaN blue    NaN     black, blue

【讨论】:

以上是关于熊猫合并列以使用逗号分隔值创建新列的主要内容,如果未能解决你的问题,请参考以下文章

mysql中将一列以逗号分隔的值分割成多列显示?

python pandas:将逗号分隔的列拆分为新列 - 每个值一个

在 2 个表之间使用内连接,对于 1 个特定列的多条记录,对整数列求和,使 varchar 列以逗号分隔

熊猫添加新列性能问题

AWS DMS 添加新列以跟踪更改

将逗号分隔字符串的熊猫列转换为虚拟变量