Сортировать по убыванию в каждой группе - PullRequest
0 голосов
/ 11 января 2019

У меня есть следующий датафрейм в пандах

 code     date         time        tank    
 123      01-01-2018   08:00:00    1
 123      01-01-2018   11:00:00    1
 123      01-01-2018   12:00:00    1
 123      01-01-2018   13:00:00    1
 123      01-01-2018   07:00:00    1
 123      01-01-2018   09:00:00    1
 124      01-01-2018   08:00:00    2
 124      01-01-2018   11:00:00    2
 124      01-01-2018   12:00:00    2
 124      01-01-2018   13:00:00    2
 124      01-01-2018   07:00:00    2
 124      01-01-2018   09:00:00    2

Я группирую и сортирую по времени

df= df.groupby(['code', 'date', 'tank']).apply(lambda x: x.sort_values(['time'], ascending=True)).reset_index()

Когда я выполняю reset_index (), я получаю следующую ошибку

ValueError: cannot insert tank, already exists

1 Ответ

0 голосов
/ 11 января 2019

Как насчет сортировки по каждому столбцу ключа группировщика с "временем" по убыванию?

df.sort_values(['code', 'date', 'tank', 'time'], ascending=[True]*3 + [False])

    code        date      time  tank
3    123  01-01-2018  13:00:00     1
2    123  01-01-2018  12:00:00     1
1    123  01-01-2018  11:00:00     1
5    123  01-01-2018  09:00:00     1
0    123  01-01-2018  08:00:00     1
4    123  01-01-2018  07:00:00     1
9    124  01-01-2018  13:00:00     2
8    124  01-01-2018  12:00:00     2
7    124  01-01-2018  11:00:00     2
11   124  01-01-2018  09:00:00     2
6    124  01-01-2018  08:00:00     2
10   124  01-01-2018  07:00:00     2

Это даст тот же эффект, но без groupby.


Если требуется groupby, вам потребуется два reset_index вызова (для удаления последнего уровня):

(df.groupby(['code', 'date', 'tank'])
   .time.apply(lambda x: x.sort_values(ascending=False))
   .reset_index(level=-1, drop=True)
   .reset_index())

    code        date  tank      time
0    123  01-01-2018     1  13:00:00
1    123  01-01-2018     1  12:00:00
2    123  01-01-2018     1  11:00:00
3    123  01-01-2018     1  09:00:00
4    123  01-01-2018     1  08:00:00
5    123  01-01-2018     1  07:00:00
6    124  01-01-2018     2  13:00:00
7    124  01-01-2018     2  12:00:00
8    124  01-01-2018     2  11:00:00
9    124  01-01-2018     2  09:00:00
10   124  01-01-2018     2  08:00:00
11   124  01-01-2018     2  07:00:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...