2017-04-10 46 views
0

我有一個包含日期和價格的數據框。我需要添加屬於前一週的所有價格:17/12至23/12,並將其放在與該周相對應的新標籤的前面。需要在對應於一周的列中添加值(Python/Pandas)

Date   Price 
12/17/2015   10 
12/18/2015   20 
12/19/2015   30 
12/21/2015   40 
12/24/2015   50 

我所要的輸出是以下

week   total 
17/12-23/12   100 
24/12-30/12   50 

我嘗試使用不同的日期時間函數和GROUPBY功能,但無法獲得O/P。請幫忙

回答

1

這種方法呢?

In [19]: df.groupby(df.Date.dt.weekofyear)['Price'].sum().rename_axis('week_no').reset_index(name='total') 
Out[19]: 
    week_no total 
0  51  60 
1  52  90 

UPDATE:

In [49]: df.resample(on='Date', rule='7D', base='4D').sum().rename_axis('week_from') \ 
      .reset_index('total') 
Out[49]: 
    week_from Price 
0 2015-12-17 100 
1 2015-12-24  50 

UPDATE2:

x = (df.resample(on='Date', rule='7D', base='4D') 
     .sum() 
     .reset_index() 
     .rename(columns={'Price':'total'})) 

x = x.assign(week=x['Date'].dt.strftime('%d/%m') 
        +'-' 
        +(x.pop('Date')+pd.DateOffset(days=7)).dt.strftime('%d/%m')) 


In [127]: x 
Out[127]: 
    total   week 
0 100 17/12-24/12 
1  50 24/12-31/12 
+0

是從週三到MIDW伊克。你的解決方案很好,但它根據日曆安排事情。如果我想從17歲開始並在那之後繼續數週,那我該怎麼做? – StevieG

0

使用重採樣

df['Date'] = pd.to_datetime(df['Date']) 
df.set_index(df.Date, inplace = True) 
df = df.resample('W').sum() 

      Price 
Date  
2015-12-20 60 
2015-12-27 90 
一週