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

时间:2019-01-01 21:35:58

标签: python pandas merge multiple-columns comma

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

例如,我正在尝试合并成这样的Colors列:

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的输出为:     黑色,蓝色

发现我的问题! 在我的代码前面,我用“”代替了NaN来代替“ None”。进行更改后,再加上反馈以插入[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)

2 个答案:

答案 0 :(得分: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

答案 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]