Сортировка данных, но сохранение определенных строк вместе

Следующий список — это просто пример, который я создал. У меня гораздо более длинный список с серийным номером автомобиля в первом столбце и датой во втором. В столбцах сзади много данных. На одну машину (серийный номер) всегда приходится три отчета и они должны оставаться вместе. Но даты всегда меняются. Таким образом, в один день «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

Вы должны добавлять необработанные данные, а не изображение или снимок экрана.

bharatk 08.07.2019 08:57

vs.sort_values ​​(по = ['Автомобили', 'дата'], по возрастанию = Ложь)

Florian H 08.07.2019 09:00

@FlorianH В этом случае самая новая дата не остается сверху.

Kuempsmichi 08.07.2019 09:09

@jezrael Это также не решает мою проблему. Неважно, какая машина находится сверху, они должны просто держаться вместе группами. Важная часть — дата.

Kuempsmichi 08.07.2019 09:28

Можете ли вы добавить ожидаемый результат к вопросу?

jezrael 08.07.2019 09:29

@jezrael добавил ожидаемый результат. Надеюсь, это поможет объяснить мой вопрос.

Kuempsmichi 08.07.2019 09:33

@jezrael Не могли бы вы удалить повторяющийся знак? Это не отвечает на мой вопрос.

Kuempsmichi 08.07.2019 09:45

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

Kuempsmichi 08.07.2019 10:05
On vehicle is always three times in the list - не уверен, что понял, можно ли извлечь это значение и перейти к решению выше? Может быть, здесь лучше всего изменить вопрос с минимальный, полный и проверяемый пример.
jezrael 08.07.2019 10:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
9
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете создать вспомогательный столбец с 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

Жаль, что не исправить. Отредактировал мой вопрос. Надеюсь теперь это понятно.

Kuempsmichi 08.07.2019 10:22

@Kuempsmichi - хм, тогда не понимаю. Извините, можно подробнее?

jezrael 08.07.2019 10:26

@Kuempsmichi - я в замешательстве, с новыми данными мое решение работает хорошо.

jezrael 08.07.2019 10:46

@jezrael Теперь это работает. Большое спасибо ;) Мне очень помогло.

Kuempsmichi 08.07.2019 11:01

Другие вопросы по теме