Как сортировать значения столбца в датафрейме с несколькими точками

В датафрейме 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('.')))))
→ Ссылка