gpt4 book ai didi

python - 按日期排序的Groupby序列,根据其他列值找到最小值,最大值

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:51 24 4
gpt4 key购买 nike

40 天前我开始学习 pandas。我只知道 pandas 基础函数。

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

    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 和 Date 排序。

请注意,所有 ID 中的 Last Status 均为 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 的最后一行。

如果 SLS == F,则替换 Cost@SLS = 1000

预期的数据框如下所示。

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

最佳答案

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

s=df[df.ID.duplicated(keep='last')].groupby('ID').agg({'Status': ['last'], 'Cost': [ 'last','min', 'max', 'mean']})
s.loc[s[('Status','last')]=='F',('Cost','last')]=1000
s
Status Cost
last last min max mean
ID
1 F 1000 100 600 261.666667
2 M 100 100 600 266.666667
3 P 100 100 700 258.333333
4 M 200 100 800 344.000000
7 F 1000 20 800 355.000000

关于python - 按日期排序的Groupby序列,根据其他列值找到最小值,最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57242321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com