python - 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 和 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 = 倒数第二个状态
请注意,Min、Max 和 Avg Cost 的计算没有考虑每个 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
解决方案
这是稍微修改 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
推荐阅读
- excel - F4 on Excel ranges, is it possible?
- html - 表单提交按钮在 MacBook 和 iphone 上不起作用
- bash - 如何比较两个文件以允许不匹配的bash
- r - For循环不将结果存储在专用数据框列中
- powerbi - Power BI 关系(如果在范围内)
- javascript - JavaScript Map 函数在对象数组中使用通用键
- javascript - 推送到已填充的数组数组将更新其所有元素
- ios - 在 Firebase 中,使用 FlutterFire,如何在 iOS 上初始化辅助应用程序?InitializeApp 与选项给出 GOOGLE_APP_ID 错误
- python - 我们如何使用 python/pandas 上传一个新的数据表而不丢弃它后面的 SQL?
- excel - 从 Excel VBA 损坏和自动化错误中恢复