2015-12-15 58 views
1

我很難理解當我以這種方式重新採樣到每週數據時發生了什麼,特別是進入星期一。 df的最後一天是今天,但重新採樣後,最終日期延長1周,其餘「重新採樣」數據似乎不在原始數據幀中。resample在熊貓中給出了不同的最終日期

import pandas as pd 
import numpy as np 
import datetime as dt 

today = dt.datetime.now() 
end = today 
start = end - pd.DateOffset(days=200) 
rows = len(pd.date_range(start=start, end=end, freq='B')) 

df = pd.DataFrame(np.random.randn(rows,4), 
    index=pd.date_range(start=start, end=end, freq='B'), 
    columns =['PX_OPEN', 'PX_LAST', 'PX_HIGH', 'PX_LOW']) 

print df.tail(10) 

         PX_OPEN PX_LAST PX_HIGH PX_LOW 
2015-12-02 14:53:11.532 0.000887 0.277900 -0.306899 -0.698697 
2015-12-03 14:53:11.532 -0.149329 -1.601389 -0.202008 -0.091503 
2015-12-04 14:53:11.532 -0.377587 1.296413 0.204357 -0.764215 
2015-12-07 14:53:11.532 -1.487945 -0.618986 0.843712 0.989913 
2015-12-08 14:53:11.532 2.950980 1.290211 0.365665 0.633706 
2015-12-09 14:53:11.532 0.156047 0.958483 0.574209 -0.708996 
2015-12-10 14:53:11.532 0.696625 -0.547642 -1.299712 1.728022 
2015-12-11 14:53:11.532 2.244693 1.034026 -0.914141 -2.604405 
2015-12-14 14:53:11.532 0.087407 1.742234 -0.643504 0.812742 
2015-12-15 14:53:11.532 1.861020 -0.637109 1.285085 -0.816025 

,如果我們這樣做:

print df.resample('W-MON').tail(5) 

      PX_OPEN PX_LAST PX_HIGH PX_LOW 
2015-11-23 0.003513 -0.246844 -0.031537 0.846289 
2015-11-30 -0.338132 0.607998 0.087007 0.394458 
2015-12-07 -0.325123 -0.337976 0.129483 -0.136570 
2015-12-14 1.227150 0.895462 -0.383497 -0.027786 
2015-12-21 1.861020 -0.637109 1.285085 -0.816025 

,所以如果你發現,原來的DF的最後一行有重採樣DF的日期二零一五年十二月十五日但最後一天有日期2015-12- 21。而且其餘的重採樣值似乎並不出現在原始df中。

回答

1

resample默認爲平均值。從12-15到12-21周的平均僅僅是最後一排...

顯然,默認的標籤是不正確的(在文檔中;或者在這個例子中):

In [11]: df.resample('W-MON') 
Out[11]: 
      PX_OPEN PX_LAST PX_HIGH PX_LOW 
2015-12-07 -0.503494 -0.161516 0.134791 -0.141126 
2015-12-14 1.227150 0.895462 -0.383497 -0.027786 
2015-12-21 1.861020 -0.637109 1.285085 -0.816025 

In [12]: df.resample('W-MON', label="left") 
Out[12]: 
      PX_OPEN PX_LAST PX_HIGH PX_LOW 
2015-11-30 -0.503494 -0.161516 0.134791 -0.141126 
2015-12-07 1.227150 0.895462 -0.383497 -0.027786 
2015-12-14 1.861020 -0.637109 1.285085 -0.816025 

它似乎是默認的「正確」。 「左」是你想要的。

同樣,你可能需要的左側被關閉(含):

In [13]: df.resample('W-MON', label="left", closed="left") 
Out[13]: 
      PX_OPEN PX_LAST PX_HIGH PX_LOW 
2015-11-30 -0.175343 -0.009025 -0.101517 -0.518138 
2015-12-07 0.912080 0.423218 -0.086053 0.007648 
2015-12-14 0.974214 0.552563 0.320791 -0.001642 

這給數字更像你期待什麼。

+0

感謝您的回答。這解決了一件事。但爲什麼現在2015-12-07的數據與原始數據幀不同呢? – Gabriel

+0

@Gabriel resample的意思是:對於12-07(含)到12-13(不含)的值...當它關閉='「左」時。 –

+0

謝謝。沒有意識到這一點。有沒有辦法只是得到的價值觀而不是意思? – Gabriel