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

问题描述 投票:0回答:2

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

谢谢你的想法!

python pandas sorting
2个回答
1
投票

您可以使用如下申请:

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

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
© www.soinside.com 2019 - 2024. All rights reserved.