python - 查找按日期和产品分组的最近 n 天的平均值
问题描述
我有一个如下所示的数据集:
date id score
0 2016-04-01 A 1.0
1 2016-04-01 B 2.0
2 2016-04-02 C 1.0
3 2016-04-02 A 3.0
4 2016-04-03 B 4.5
5 2016-04-04 C 1.0
6 2016-04-05 A 2.0
7 2016-04-06 B 3.0
8 2016-04-06 C 6.0
我想计算过去 N 天的平均值,不包括今天,按日期和产品分组,因此 n=4 的结果如下所示:
date id mean_of_last_n_days
0 2016-04-01 A NaN
1 2016-04-01 B NaN
2 2016-04-02 C 0
3 2016-04-02 A 1.0
4 2016-04-03 B 2.0
5 2016-04-04 C 1.0
6 2016-04-05 A 2.0
7 2016-04-06 B 3.25
8 2016-04-06 C 1.0
有什么建议吗?
解决方案
您可以按 分组id
并使用pd.shift
将所有值移动一个位置,因此当您id
再次分组并采用特定窗口的滚动平均值时,它只考虑最后一个n
元素:
n=4
df.score = df.groupby('id', sort=False).shift(1).score
df.groupby('id').rolling(f'{n} D', on = 'date').mean().reset_index()
id date score
0 A 2016-04-01 NaN
1 A 2016-04-02 1.00
2 A 2016-04-05 2.00
3 B 2016-04-01 NaN
4 B 2016-04-03 2.00
5 B 2016-04-06 3.25
6 C 2016-04-02 NaN
7 C 2016-04-04 1.00
8 C 2016-04-06 1.00
推荐阅读
- excel - 将 Excel 工作表作为 Access 查询结果进行操作
- woocommerce - 从结帐页面店面主题woocommerce中删除面包屑
- python - 如何在 Pandas 中展平双嵌套 json 文件
- java - java springdoc @ApiResponses 如何定义一个列表作为返回对象使用
- heroku - 升级到没有 webpacker 的 Rails 6.0 | Heroku 生产中没有 scss / bootstrap
- windows - Electron-installer-windows 在 macOS 上不起作用
- awk - 将文件的最后一行捕获为整数变量并在 awk 命令中使用
- reactjs - React JS 中的 findDOMNode 替代方案
- comparison - 如何比较两个多类混淆矩阵的性能?
- python - 同时显示实时数据和命令行输入