Python:如何对df列中的行字符串进行排序?

Python:如何对df列中的行字符串进行排序?,python,pandas,sorting,Python,Pandas,Sorting,我有一个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

我有一个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)

谢谢你的想法

您可以按如下方式使用apply:

df["col2"] = df.col2.apply(lambda x: ", ".join(sorted(x.split(", "))))

说明:

   col1        col2
0     1  A, C, D, D
1     2  A, A, B, B
   col1        col2
0     1  A, C, D, D
1     2  A, A, B, B
  • df.col2.apply(..)
    df.col2
  • 对于每一行,它使用
    x.split(“,”)
  • 然后使用
    排序(x.split(“,”)
  • 然后将排序列表连接到字符串,并使用

    ", ".join(sorted(x.split(", ")))
    

输出:

   col1        col2
0     1  A, C, D, D
1     2  A, A, B, B
   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: