我想合并并订购三列
x1 x2 x3 x4
US DE None None
FR DE US None
FR None None None
DE CA None None
我想做的是按字母顺序合并这四列。
merged
DE, US
DE, FR, US
FR
CA, DE
答案 0 :(得分:3)
您可以过滤掉None
,排序和加入列表理解应该非常快:
df['merged'] = [', '.join(sorted(filter(None, x))) for x in df.to_numpy()]
使用lambda函数的替代方法较慢:
df['merged'] = df.apply(lambda x: ', '.join(sorted(filter(None, x))), axis=1)
print (df)
x1 x2 x3 x4 merged
0 US DE None None DE, US
1 FR DE US None DE, FR, US
2 FR None None None FR
3 DE CA None None CA, DE
如果使用纯熊猫方法和较大的DataFrame
,这应该是最慢的:
s = df.stack().sort_values().groupby(level=0).agg(', '.join)
print (s)
0 DE, US
1 DE, FR, US
2 FR
3 CA, DE
dtype: object