下面的列表只是我创建的一个示例。我在第一栏中有更长的清单,其中有汽车序列号,在第二栏中是日期。在后面的列中,有很多数据。一辆车(序列号)总是有三个报告,它们应该在一起。但是日期总是在变化。因此,一天“ 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
答案 0 :(得分:0)
您可以使用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