我有一个df包含一个用逗号分隔的字符串的列,我尝试按字母顺序排序。
对于像这样的简单列表
data = ['B', 'C', 'A', 'D']
我会用类似的东西
', '.join(sorted(data))
哪个工作正常。但是,对于我的df看起来像
d = {'col1': [1, 2], 'col2': ['D, D, A, C', 'B, A, B, A']}
df = pd.DataFrame(data=d)
我无法按字母顺序排列col2行。我到目前为止尝试过
print ', '.join(sorted(df['col2']))
它返回一个完整的排序,但不是行。我的预期结果是:
res = {'col1': [1, 2], 'col2': ['A, C, D, D', 'A, A, B, B']}
result = pd.DataFrame(data=res)
谢谢你的想法!
您可以使用如下申请:
df["col2"] = df.col2.apply(lambda x: ", ".join(sorted(x.split(", "))))
说明:
df.col2.apply(..)
遍历df.col2
的行x.split(", ")
将字符串拆分为一个列表sorted(x.split(", "))
对每个列表进行排序", ".join(sorted(x.split(", ")))
输出:
col1 col2
0 1 A, C, D, D
1 2 A, A, B, B
另一种方式是,
方法-1
df['col2'] = [', '.join(sorted (val )) for val in df.col2.str.split(', ').values] # split the value by , sort the values and combined it with `, `
print(df)
方法-2:
df['col2'] = [', '.join(sorted(x.split(', '))) for x in df['col2']]
print(df) # for each value in cell split the value by `, ` sort the value and join by `, `
O / P:
col1 col2
0 1 A, C, D, D
1 2 A, A, B, B