如何重新采样大熊猫系列(不是结束,不是开始)?

时间:2015-11-01 23:14:32

标签: python pandas resampling

我知道如何对数据帧进行重新采样,但对规则参数不接受DateOffset(月份= 1)感到沮丧。

如何以每月频率重新采样,但是从任何给定日期开始。例如:

Route::put('/manage_accounts/{id}', function()
{
    //
}); 

会给我

    ts = pd.date_range(end='19/9/2015', periods=127, freq='D')
    df = pd.DataFrame(pd.Series(range(len(ts)), index=ts))
    print(df.resample('M',how='sum',convention='end').tail(3))

我希望它给予

               0
2015-07-31  1674
2015-08-31  2635
2015-09-30  2090

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

这有点笨拙,但我认为它有效:

df.index = df.index + pd.to_timedelta('19D')

print(df2.resample('M',how='sum',loffset= '19D').tail(3))

               0
2015-09-19  1674
2015-10-19  2535
2015-11-19  3051

答案 1 :(得分:0)

关于此

有一个较旧的issue

以下是一种解决方法 - 您可以转换为每月PeriodIndex - 如果超过月中的某一天(下面的where(...)),则向前滚动月份,然后再添加获取标签的天数。

In [61]: day = 19

In [62]: p_months = df.index.to_period('M')

In [66]: month = (p_months + np.where(df.index.day > day, 1, 0)).to_timestamp(how='s')

In [67]: grouper = month + pd.Timedelta(days=day-1)

In [68]: df.groupby(grouper).sum()
Out[68]: 
               0
2015-05-19     6
2015-06-19   589
2015-07-19  1485
2015-08-19  2480
2015-09-19  3441