Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sum()分组输出与sum()分组输出不同_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python sum()分组输出与sum()分组输出不同

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 ... ...

将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
... ...
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()