Сортировка индекса этого набора данных? - PullRequest
0 голосов
/ 06 ноября 2019

Я сейчас пытаюсь отсортировать этот набор данных:

     A  
1    x
101  y
104  a
11   b
111  z
119  c
13   d
131  w

Я применил функцию sort_index() к своему фрейму данных, который называется X_train следующим образом:

X_train.sort_index()

Однако я бы хотел, чтобы мои индексы сортировались следующим образом:

     A  
1    x
11   b
13   d
101  y
104  a
111  z
119  c
131  w

Возможно ли это с какой-либо функцией в пандах или любой библиотеке Pythonic?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Либо введите:

X_train = X_train.sort_index()

или:

X_train.sort_index(inplace=True)
0 голосов
/ 06 ноября 2019

На самом деле вы хотите отсортировать ваш DataFrame:

  • сначала по длине ключа (в виде строки),
  • , затем по значение .

Для этого вы можете использовать следующий код:

df['ind'] = df.index.astype('str')
df['len'] = df.ind.str.len()
df = df.sort_values(['len', 'ind']).drop(columns=['len', 'ind'])

Другое, более краткое решение:

df.iloc[np.argsort(df.index.map(lambda it: (len(str(it)), it)))]

Идея такова:

  • Вычислить кортеж "длина, значение" для каждого значения индекса (лямбда-функция).
  • Выполнить argsort - вы получите позициистроки, отсортированные по этим кортежам.
  • Извлечение элементов из этих позиций.
...