Python sum()分组输出与sum()分组输出不同
将cumsum()与groupby结合使用时,我遇到了一个意外的行为 假设以下数据(每小时,不同的标志,延伸多年): 出于测试目的,它看起来是这样的:Python sum()分组输出与sum()分组输出不同,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,将cumsum()与groupby结合使用时,我遇到了一个意外的行为 假设以下数据(每小时,不同的标志,延伸多年): 出于测试目的,它看起来是这样的: 2019-12-01 00:00:00+01:00 3.00 2019-12-01 01:00:00+01:00 -1.00 2019-12-01 02:00:00+01:00 3.00 2019-12-01 03:00:00+01:00 -1.00 2019-12-01 04:00:00+01:00 3.00 ... ...
2019-12-01 00:00:00+01:00 3.00
2019-12-01 01:00:00+01:00 -1.00
2019-12-01 02:00:00+01:00 3.00
2019-12-01 03:00:00+01:00 -1.00
2019-12-01 04:00:00+01:00 3.00
... ...
2020-03-30 20:00:00+02:00 -1.00
2020-03-30 21:00:00+02:00 3.00
2020-03-30 22:00:00+02:00 -1.00
2020-03-30 23:00:00+02:00 3.00
2020-03-31 00:00:00+02:00 -1.00
现在请注意sum()和cumsum()与group by month的奇数区别:
sum()-->3个元素,即每月一个
df.groupby(pd.Grouper(freq = 'M')).sum()
2019-12-31 00:00:00+01:00 744.00
2020-01-31 00:00:00+01:00 744.00
2020-02-29 00:00:00+01:00 696.00
2020-03-31 00:00:00+02:00 720.00
cumsum()-->1489个元素,即每小时一个元素
df.groupby(pd.Grouper(freq = 'M')).cumsum()
2019-12-01 00:00:00+01:00 3.00
2019-12-01 01:00:00+01:00 2.00
2019-12-01 02:00:00+01:00 5.00
2019-12-01 03:00:00+01:00 4.00
2019-12-01 04:00:00+01:00 7.00
... ...
2020-03-30 20:00:00+02:00 716.00
2020-03-30 21:00:00+02:00 719.00
2020-03-30 22:00:00+02:00 718.00
2020-03-30 23:00:00+02:00 721.00
2020-03-31 00:00:00+02:00 720.00
我可以看出您想要后一种输出是有原因的,但这不是不一致的吗
考虑这样一种情况,即用户希望在年与年之间重置累积的月总和。应该使用什么代码?一种可能的方法:
df.groupby(pd.Grouper(freq = 'Y')).cumsum().groupby(pd.Grouper(freq = 'M')).last()
还有其他/更好的方法吗
df.groupby(pd.Grouper(freq = 'Y')).cumsum().groupby(pd.Grouper(freq = 'M')).last()