Python: Как отсортировать строки строк в столбцах df? - PullRequest
0 голосов
/ 21 марта 2019

У меня есть 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 ]

1 голос
/ 21 марта 2019

Вы можете использовать применить следующим образом:

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 голосов
/ 21 марта 2019

другой путь был бы,

Метод -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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...