熊猫在列中合并字符串并对其进行排序

时间:2020-11-05 13:20:43

标签: python pandas

我想合并并订购三列

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

1 个答案:

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