我有一个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)
谢谢您的想法!
答案 0 :(得分:1)
您可以按以下方式使用Apply:
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 :(得分:0)
另一种方式,
方法-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