排序数据,但将特定行保持在一起

时间:2019-07-08 06:56:17

标签: python excel pandas numpy sorting

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

您可以使用GroupBy.transformmax创建帮助者列,并按此列排序并最后将其删除:

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