按自定义固定期限分组时间序列

时间:2016-02-11 21:59:52

标签: 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')).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

1 个答案:

答案 0 :(得分:0)

这是我用于特定需求的解决方案。如果有人有更好的答案,请告诉我。

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