我想按固定时间段对时间序列进行分组,与函数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
答案 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