【发布时间】:2020-05-18 01:58:54
【问题描述】:
我有一个数据框,其中包含 20 年的数据,时间作为数据时间索引。
编辑
Time value
1999-01-01 00:00:00 7
1999-01-01 01:00:00 4
1999-01-01 02:00:00 9
1999-01-01 03:00:00 4
1999-01-01 04:00:00 2
...
2018-12-31 19:00:00 8
2018-12-31 20:00:00 1
2018-12-31 21:00:00 9
2018-12-31 22:00:00 6
2018-12-31 23:00:00 5
我需要得到每个月的总和,我很喜欢
df_new = df.groupby([df.index.year, df.index.month]).sum()
结果
Month value
1999 1 6
2 9
3 7
2000 1 5
2 7
3 6
2001 1 4
2 6
3 8
2002 1 7
2 9
3 8
2003 1 5
2 7
3 7
....
2018 1 9
2 6
3 7
但现在我需要一种方法来计算过去 3 年每个月的平均值。例如,对于 2002 年,我将有:对于第 1 个月,1999,2000,2001 的第 1 个月的平均值,对于第 2 个月,1999,2000,2001 的第 2 个月的平均值,依此类推。那么 2003 年的平均值将是 2000 年、2001 年和 2002 年,直到 2018 年。这意味着前 3 年我将获得 Nan 值。
所以我的最终输出应该是这样的:
Month value average_past_3_years
1999 1 6 nan
2 9 nan
3 7 nan
2000 1 5 nan
2 7 nan
3 6 nan
2001 1 4 nan
2 6 nan
3 8 nan
2002 1 7 5.0
2 9 7.3
3 8 7.0
2003 1 5 5.3
2 7 7.3
3 7 7.3
...
我正在考虑使用 .apply() 但无法找到使其工作的函数:(
df.groupby([df.index.year, df.index.month]).apply(somefunction)
【问题讨论】:
-
能不能先把原始数据贴出来再求和?
标签: python pandas time-series