分别乘以值的 pandas 滚动总和 [英] Pandas rolling sum for multiply values separately
本文介绍了分别乘以值的 pandas 滚动总和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下数据框:
a = pd.DataFrame({'unit': [2, 2, 3, 3, 3, 4, 4, 4, 5],
'date': [1, 2, 1, 2, 3, 1, 2, 3, 1],
'revenue': [1, 1, 3, 5, 7, 6, 6, 2, 9]})
窗口 = 2 的 Pandas 滚动.sum:
Pandas rolling.sum with window = 2:
a['rolled_sum'] = a.rolling(2, on='date').sum().shift(+1)['revenue']
逐行计算这个总和:
adunit date revenue rolled_sum
0 2 1 1 NaN
1 2 2 1 NaN
2 3 1 3 2.0
3 3 2 5 4.0
4 3 3 7 8.0
5 4 1 6 12.0
6 4 2 6 13.0
7 4 3 2 12.0
8 5 1 9 8.0
我想为每个单位单独计算这个滚动总和:
I would like to have this rolling sum computed for each unit separately:
adunit date revenue rolled_sum
0 2 1 1 NaN
1 2 2 1 NaN
2 3 1 3 NaN
3 3 2 5 NaN
4 3 3 7 8.0
5 4 1 6 NaN
6 4 2 6 NaN
7 4 3 2 12.0
8 5 1 9 NaN
换句话说:应为每个单元单独执行滚动求和.在我的原始数据集中,我有数百个单元,并且希望对每个单元逐日执行滚动求和.
In other words: rolling sum should be performed for each unit separately. In my original dataset I have hundreds of units, and want to perform a rolling sum day-by-day for each of them.
有什么想法吗?
非常感谢:)
安迪
推荐答案
IIUC,你可以在 groupby 上滚动:
IIUC, you can do rolling on groupby:
a['rolled_sum'] = (a.groupby('unit')
.rolling(2, on='date').sum()['revenue']
.groupby('unit').shift(1)
.to_numpy()
)
输出:
unit date revenue rolled_sum
0 2 1 1 NaN
1 2 2 1 NaN
2 3 1 3 NaN
3 3 2 5 NaN
4 3 3 7 8.0
5 4 1 6 NaN
6 4 2 6 NaN
7 4 3 2 12.0
8 5 1 9 NaN
这篇关于分别乘以值的 pandas 滚动总和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文