2014-02-19 46 views
5

我有一個DataFrame有兩個Timestamp列,其中一個被用作重採樣的索引,另一個保留爲列。如果我重新採樣DataFrame,那麼剩下的一列就會被丟棄。我想它進行重新採樣,好像它是一個數字列(這是真的):熊貓在重採樣中刪除時間戳列

import numpy as np 
import pandas as pd 
init_time=pd.date_range(start='2010-01-01 00:00', end='2010-01-05 00:00', freq='12H') 
valid_time=pd.date_range(start='2010-01-01 00:00', end='2010-01-05 00:00', freq='12H') 
data = np.random.random(len(valid_time)) 
frame = pd.DataFrame(index=valid_time, data=data) 
frame['init_time'] = init_time 

數據幀都有一個索引,1數值列,和一個時間戳列

     0   init_time 
2010-01-01 00:00:00 0.869667 2010-01-01 00:00:00 
2010-01-01 12:00:00 0.225805 2010-01-01 12:00:00 
2010-01-02 00:00:00 0.348080 2010-01-02 00:00:00 
2010-01-02 12:00:00 0.761399 2010-01-02 12:00:00 
2010-01-03 00:00:00 0.645069 2010-01-03 00:00:00 
2010-01-03 12:00:00 0.133111 2010-01-03 12:00:00 
2010-01-04 00:00:00 0.314302 2010-01-04 00:00:00 
2010-01-04 12:00:00 0.130491 2010-01-04 12:00:00 
2010-01-05 00:00:00 0.621703 2010-01-05 00:00:00 

現在重新取樣到每日:

daily = frame.resample('D', how='mean') 

      0 
2010-01-01 0.547736 
2010-01-02 0.554740 
2010-01-03 0.389090 
2010-01-04 0.222396 
2010-01-05 0.621703 

我的init_time列已被刪除。我可以先將它轉換爲原始整數列,但有沒有更簡單的方法?

回答

1

這不是datelike(平均)來實現,但你可以這樣來做:

獲取數值結果

In [48]: numeric = frame.resample('D',how='mean') 

獲取datelike結果。首先得到具有日期的列

In [49]: datelike = frame.loc[:,frame.dtypes.isin([np.dtype('datetime64[ns]')])] 

然後重新採樣它們;你需要將它們視爲整數來計算它們;時間戳會處理這個浮動輸入(與基本爲圓形到最近的納秒級)

In [50]: datelike = datelike.resample('D', 
     how=lambda x: Timestamp(x.view('i8').mean())) 

把他們重新走到一起

In [51]: concat([numeric,datelike],axis=1) 
Out[51]: 
        0   init_time 
2010-01-01 0.798880 2010-01-01 06:00:00 
2010-01-02 0.859781 2010-01-02 06:00:00 
2010-01-03 0.515503 2010-01-03 06:00:00 
2010-01-04 0.505557 2010-01-04 06:00:00 
2010-01-05 0.979835 2010-01-05 00:00:00 

[5 rows x 2 columns] 
+0

謝謝,這本質上是我使用的解決方法。我想知道是否有任何願意在Pandas中爲每列指定一個重採樣函數? – samwise

+0

你可以通過TimeGrouper通過groupby來完成。我想你可以有一個簽名,例如:''df.resamplee(freq .... how = {columns:func .....},how_default = default_function)''具有每列覆蓋和默認值。請在github上爲此提出問題。 (而PR會更好!) – Jeff

+0

好的,會試試。可能是我的第一個公關。 – samwise