按日期按顺序分组,根据其他列值找到最小值,最大值

时间:2019-07-28 15:28:30

标签: python pandas pandas-groupby

40天前,我开始学习熊猫。我只知道熊猫的基本功能。

我有一个数据框,如下所示。

    ID  Status  Date    Cost
0   1   F   2017-06-22  500
1   1   M   2017-07-22  100
2   1   P   2017-10-22  100
3   1   F   2018-06-22  600
4   1   P   2018-08-22  150
5   1   F   2018-10-22  120
6   1   F   2019-03-22  750
7   2   M   2017-06-29  200
8   2   F   2017-09-29  600
9   2   F   2018-01-29  500
10  2   M   2018-03-29  100
11  2   P   2018-08-29  100
12  2   M   2018-10-29  100
13  2   F   2018-12-29  500
14  3   M   2017-03-20  300
15  3   F   2018-06-20  700
16  3   P   2018-08-20  100
17  3   M   2018-10-20  250
18  3   F   2018-11-20  100
19  3   P   2018-12-20  100
20  3   F   2019-03-20  600
22  4   M   2017-08-10  800
23  4   F   2018-06-10  100
24  4   P   2018-08-10  120
25  4   F   2018-10-10  500
26  4   M   2019-01-10  200
27  4   F   2019-06-10  600
31  7   M   2017-08-10  800
32  7   F   2018-06-10  100
33  7   P   2018-08-10  20
34  7   F   2018-10-10  500
35  7   F   2019-01-10  200

数据集是根据ID和日期排序的。

请注意,所有ID中的“最后状态”均为F。

我想从上面的数据框中准备下面的数据框。

ID  SLS Cost@SLS  Min_Cost  Max_Cost  Avg_Cost
1   F   120       100       600       261.67
2   M   100       100       600       266.67
3   P   100       100       700       258.33
4   M   200       100       800       344.00
7   F   500       20        800       360.00

SLS =倒数第二个状态

请注意,计算的最低,最高和平均费用未考虑每个ID的最后一行。

然后从中替换Cost @ SLS = 1000(如果SLS == F

预期的数据帧如下所示。

ID  SLS Cost@SLS  Min_Cost  Max_Cost  Avg_Cost
1   F   1000       100       600       261.67
2   M   100       100       600       266.67
3   P   100       100       700       258.33
4   M   200       100       800       344.00
7   F   1000       20        800       360.00

1 个答案:

答案 0 :(得分:3)

这是略微修改piR答案的一种方法

${!ab}