每季度对数据框重新采样一次,但使用不同的结束月份

时间:2018-10-20 21:10:02

标签: python pandas pandas-groupby

我想对数据框中每个月的数据求和,但是要在一个季度的每个月中求和。所以输入是:

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月这样的自定义季度结束。如何更改代码以适用于自定义季度末?

1 个答案:

答案 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