Панды сортируют фрейм данных по логическому дню - PullRequest
0 голосов
/ 24 ноября 2018

enter image description here

У меня есть следующие результирующие панды DateFrame: Как я могу заставить это правильно сортировать?Например, нужно сделать так, чтобы День 2 наступал после Дня 1, а не Дня 11. Как видно из группы 2 ниже?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

set_levels + sort_index

Проблема в том, что ваши строки сортируются как строки , а не численно.Сначала преобразуйте свой первый индексный уровень в числовой, затем выполните сортировку по индексу:

# split by whitespace, take last split, convert to integers
new_index_values = df.index.levels[1].str.split().str[-1].astype(int)

# set 'Day' level
df.index = df.index.set_levels(new_index_values, level='Day')

# sort by index
df = df.sort_index()

print(df)

           Value
Group Day       
A     0        1
      2        3
      11       2
B     5        5
      7        6
      10       4

Настройка

Приведенная выше демонстрация использует этот пример настройки:

df = pd.DataFrame({'Group': ['A', 'A', 'A', 'B', 'B', 'B'],
                   'Day': ['Day 0', 'Day 11', 'Day 2', 'Day 10', 'Day 5', 'Day 7'],
                   'Value': [1, 2, 3, 4, 5, 6]}).set_index(['Group', 'Day'])

print(df)

              Value
Group Day          
A     Day 0       1
      Day 11      2
      Day 2       3
B     Day 10      4
      Day 5       5
      Day 7       6
0 голосов
/ 24 ноября 2018

Вам нужно отсортировать целые числа вместо строк:

import pandas as pd
x = pd.Series([1,2,3,4,6], index=[3,2,1,11,12])
x.sort_index()

1     3
2     2
3     1
11    4
12    6
dtype: int64

y = pd.Series([1,2,3,4,5], index=['3','2','1','11','12'])
y.sort_index()

1     3
11    4
12    5
2     2
3     1
dtype: int64

Я бы посоветовал иметь только цифры в столбце вместо строк 'Day ..'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...