2016-02-11 88 views
1

我想按固定时间段对我的时间系列进行分组,但功能与定制时间段的功能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 

预期的行为是有相同的固定期限(如四分之一,但两个月)的任何数据(一月至二月,三月,四月,等)。 有谁知道解决方案?提前致谢。

  categ 
2015-02  3 
2015-04  4 

回答

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