Сортировка данных, но хранение отдельных строк вместе - PullRequest
0 голосов
/ 08 июля 2019

Следующий список - это просто пример, который я создал.У меня гораздо более длинный список с серийным номером автомобиля в первом столбце, а во втором - датой.В колонках много данных.Один автомобиль (серийный номер) всегда имеет три отчета, и они должны оставаться вместе.Но даты всегда меняются.Таким образом, однажды у «car_01» самая новая запись, а у другой - «car_24» самая новая.Новейшая запись с серийным номером автомобиля должна быть сверху.Затем следуют два других отчета из серийного номера.Четвертый должен быть вторым новейшим отчетом, причем оба отчета следуют из второго серийного номера.

    Cars    date
0   Car_01  2019-01-22
1   Car_01  2019-05-23
2   Car_01  2019-06-17
3   Car_02  2019-02-15
4   Car_02  2019-06-17
5   Car_02  2019-09-18
6   Car_03  2019-02-27
7   Car_03  2019-10-19
8   Car_03  2019-11-22
9   Car_04  2019-04-12
10  Car_04  2019-11-17
11  Car_04  2019-01-16

Есть ли способ создать группы, а затем отсортировать по дате?

vs = vs.sort_values(by=['date'], ascending=False)

Если я сортирую это так, машины смешиваются.

    Cars    date
8   Car_03  2019-11-22
10  Car_04  2019-11-17
7   Car_03  2019-10-19
5   Car_02  2019-09-18
2   Car_01  2019-06-17
4   Car_02  2019-06-17
1   Car_01  2019-05-23
9   Car_04  2019-04-12
6   Car_03  2019-02-27
3   Car_02  2019-02-15
0   Car_01  2019-01-22
11  Car_04  2019-01-16

Вывод должен выглядеть так, если отсортирован правильно.

    Cars    date
0   Car_03  2019-11-22
1   Car_03  2019-10-19
2   Car_03  2019-02-27
3   Car_04  2019-11-17
4   Car_04  2019-04-12
5   Car_04  2019-01-16
6   Car_02  2019-09-18
7   Car_02  2019-06-17
8   Car_02  2019-02-15
9   Car_01  2019-06-17
10  Car_01  2019-05-23
11  Car_01  2019-01-22

1 Ответ

0 голосов
/ 08 июля 2019

Вы можете создать вспомогательный столбец с GroupBy.transform и max, сортируя по этому столбцу и в последний раз удаляя его:

vs['new'] = vs.groupby('Cars')['date'].transform('max')
print (vs)
      Cars        date         new
0   Car_01  2019-05-22  2019-07-23
1   Car_01  2019-07-23  2019-07-23
2   Car_01  2019-01-25  2019-07-23
3   Car_02  2019-08-24  2019-08-24
4   Car_02  2019-04-14  2019-08-24
5   Car_02  2019-03-27  2019-08-24
6   Car_03  2019-02-25  2019-12-16
7   Car_03  2019-05-17  2019-12-16
8   Car_03  2019-12-16  2019-12-16
9   Car_04  2019-09-28  2019-11-19
10  Car_04  2019-03-17  2019-11-19
11  Car_04  2019-11-19  2019-11-19

vs = vs.sort_values(by=['new', 'Cars','date'], ascending=False).drop('new', axis=1)
print (vs)
      Cars        date
8   Car_03  2019-12-16
7   Car_03  2019-05-17
6   Car_03  2019-02-25
11  Car_04  2019-11-19
9   Car_04  2019-09-28
10  Car_04  2019-03-17
3   Car_02  2019-08-24
4   Car_02  2019-04-14
5   Car_02  2019-03-27
1   Car_01  2019-07-23
0   Car_01  2019-05-22
2   Car_01  2019-01-25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...