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

时间:2019-03-21 09:31:57

标签: 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 ', '.join(sorted(df['col2']))

返回完整排序,但不按行排序。 我的预期结果是:

res = {'col1': [1, 2], 'col2': ['A, C, D, D', 'A, A, B, B']}
result = pd.DataFrame(data=res)

谢谢您的想法!

2 个答案:

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