我想对数据框中每个月的数据求和,但是要在一个季度的每个月中求和。所以输入是:
Index Data
2017-02-05 10
2017-03-04 20
2017-06-20 40
此代码在下面起作用:
cum_df = monthly_df.groupby(by=[monthly_df.index.quarter, monthly_df.index.year]).cumsum()
具有以下输出:
Index Data
2017-02-28 10
2017-03-31 30
2017-04-31 0
2017-05-31 0
2017-06-30 40
但是,我不希望这些季度在3月/ 6月/ 9月/ 12月结束,而希望在2月/ 5月/ 8月/ 11月这样的自定义季度结束。如何更改代码以适用于自定义季度末?
答案 0 :(得分:1)
使用pd.Grouper(freq='anchored_offset')
,其中anchored_offset
是文档中所需的“锚定偏移”字符串:https://pandas.pydata.org/pandas-docs/stable/timeseries.html#anchored-offsets
示例:
df = pd.DataFrame(index=pd.date_range(start='2017-02-01', end='2018-1-31', freq='W'))
# Label each Sunday with a 1
df[0] = 1
# Group by quarter with year ending in November ('Q-NOV'), but label each quarter
# with its start date ('QS-NOV')
df.groupby(pd.Grouper(freq='QS-NOV')).sum()
0
2017-02-01 13
2017-05-01 13
2017-08-01 13
2017-11-01 13