2015-11-01 51 views
0

我知道如何重新採樣一個數據幀,但感到沮喪的規則參數不接受DateOffset(月份= 1)。如何重新採樣熊貓系列monthy(不結束,不開始)?

我該如何重複採樣每月的頻率,但從任何給定的日期。例如:

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 

,我想它給

   0 
2015-07-19 ... 
2015-08-19 ... 
2015-09-19 ... 

我怎樣才能做到這一點?

+0

使用'規則='30D''。它讓你接近,但不完全在你想要的地方。 – Kartik

回答

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 
1

這有點janky的,但我認爲它的工作原理:

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