Следующий список — это просто пример, который я создал. У меня гораздо более длинный список с серийным номером автомобиля в первом столбце и датой во втором. В столбцах сзади много данных. На одну машину (серийный номер) всегда приходится три отчета и они должны оставаться вместе. Но даты всегда меняются. Таким образом, в один день «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
vs.sort_values (по = ['Автомобили', 'дата'], по возрастанию = Ложь)
@FlorianH В этом случае самая новая дата не остается сверху.
@jezrael Это также не решает мою проблему. Неважно, какая машина находится сверху, они должны просто держаться вместе группами. Важная часть — дата.
Можете ли вы добавить ожидаемый результат к вопросу?
@jezrael добавил ожидаемый результат. Надеюсь, это поможет объяснить мой вопрос.
@jezrael Не могли бы вы удалить повторяющийся знак? Это не отвечает на мой вопрос.
@jezrael Извините, это не решает проблему. Список здесь — это просто пример, который я создал. У меня есть гораздо более длинный список с серийными номерами автомобилей в одном столбце и датой в другом, а в столбцах за этим много данных. На транспортном средстве всегда три раза в списке и они должны оставаться вместе. но даты всегда меняются. Таким образом, в один день «car_01» имеет самую новую запись, а в другой день «car_24» — самую новую запись. Самая новая запись с серийным номером автомобиля должна быть сверху. Затем следующие два других сообщения от серийного номера. четвертый должен быть вторым самым новым отчетом.
On vehicle is always three times in the list - не уверен, что понял, можно ли извлечь это значение и перейти к решению выше? Может быть, здесь лучше всего изменить вопрос с минимальный, полный и проверяемый пример.






Вы можете создать вспомогательный столбец с 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 - хм, тогда не понимаю. Извините, можно подробнее?
@Kuempsmichi - я в замешательстве, с новыми данными мое решение работает хорошо.
@jezrael Теперь это работает. Большое спасибо ;) Мне очень помогло.
Вы должны добавлять необработанные данные, а не изображение или снимок экрана.