Python 按自定义固定时段对时间序列进行分组

Python 按自定义固定时段对时间序列进行分组,python,pandas,time-series,Python,Pandas,Time Series,我想按固定时间段对时间序列进行分组,这与函数to_period()的行为完全相同,但具有自定义时间段 # Some test data df = pd.DataFrame({'categ': np.random.choice([1,2,3], 12)}, index=pd.date_range(start=pd.to_datetime('2015-01-01'),periods=12, freq='M')) print(df.groupby(df.index.to_period('M')).s

我想按固定时间段对时间序列进行分组,这与函数
to_period()
的行为完全相同,但具有自定义时间段

# Some test data
df = pd.DataFrame({'categ': np.random.choice([1,2,3], 12)}, index=pd.date_range(start=pd.to_datetime('2015-01-01'),periods=12, freq='M'))

print(df.groupby(df.index.to_period('M')).sum().head(2))

         categ
2015-01      1
2015-02      3
但我想按一个自定义周期对时间序列进行分组,例如2个月(双月)。不幸的是
to_period('2M')
不起作用,如果我使用
TimeGrouper
时间段不是固定的,它们是相对于开始日期的

print(df.groupby(pd.TimeGrouper('2M')).sum().head(2))

            categ
2015-01-31      3
2015-03-31      4
无论数据是什么(1-2月、3-4月等),预期的行为都是具有相同的固定期限(如一个季度,但为两个月)。 有人知道解决办法吗?提前谢谢

           categ
2015-02      3
2015-04      4

这是我为满足我的特殊需要而使用的解决方案。如果有人有更好的答案,请告诉我

freq = '2M'
df[freq] = df.index.to_period(freq)
# Adding a month each even month
df[freq] = df[freq] + df[freq].dt.month % 2 * MonthEnd()
print(df.groupby(freq).sum().head(2))

         categ
2M            
2015-02      5
2015-04      2

这是我为满足我的特殊需要而使用的解决方案。如果有人有更好的答案,请告诉我

freq = '2M'
df[freq] = df.index.to_period(freq)
# Adding a month each even month
df[freq] = df[freq] + df[freq].dt.month % 2 * MonthEnd()
print(df.groupby(freq).sum().head(2))

         categ
2M            
2015-02      5
2015-04      2