Как сортировать значения столбца в датафрейме с несколькими точками
В датафрейме df есть столбец 'index', который выглядит так:

Я хотел отсортировать столбец 'index' по пунктам. Использовал такой метод:
df.sort_values(by='index'))
но на выходе получил:
Я так понимаю, что когда сортирую столбец, то значение 1.1.1.11 считается меньшим за 1.1.1.9, хотя должно быть наоборот. Подскажите, как решить эту проблему? Заранее спасибо.
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Нужно найти или написать функцию, которая будет правильно подготавливать эти строки к сортировке. Я написал. Суть в следующем:
- разбиваем строки по точке на отдельные элементы
- пустые элементы (например, после последней точки) выкидываем
- не пустые элементы преобразовываем в числа
- делаем из получившегося списка чисел кортеж
- а дальше питон и
Pandasуже сами умеют правильно такие кортежи сортировать
Код:
import pandas as pd
data = ['1.1.1.','1.1.1.11.','1.1.1.9.','1.2.']
def prepare2sort(x):
return [tuple(map(int, filter(None, i.split('.')))) for i in x]
df = pd.DataFrame({'data': data})
df.sort_values('data', key=prepare2sort)
Вывод:
data
0 1.1.1.
2 1.1.1.9.
1 1.1.1.11.
3 1.2.
Автор решения: SergFSM
→ Ссылка
можно попробовать вот такой, правда довольно громоздкий, вариант сортировки по ключу:
df.sort_values('data', key=lambda x: pd.Series(x).apply(
lambda s: tuple(map(int, s.strip('.').split('.')))))
