2017-10-06 70 views
1

我有類似如下的數據框:熊貓獲得最小總在移動窗口

df=pd.Series(index=pd.date_range(start='1/1/2017', end='1/10/2017', freq='D'), 
      data=[5,5,2,1,3,4,5,6,7,8]) 

df 
Out[216]: 
2017-01-01 5 
2017-01-02 5 
2017-01-03 2 
2017-01-04 1 
2017-01-05 3 
2017-01-06 4 
2017-01-07 5 
2017-01-08 6 
2017-01-09 7 
2017-01-10 8 
Freq: D, dtype: int64 

我想,以確定具有最小總價值3天期間的開始日期。因此,在此示例中,2017-01-03到2017-01-05在這3天內的最小值爲6。

有沒有辦法做到這一點沒有循環通過每3天的窗口?

其結果將是:

2017-01-03 6 

如果有多個窗口具有相同的最低金額,結果可以爲每一個記錄。

回答

7

IIUC rolling

df=pd.Series(index=pd.date_range(start='1/1/2017', end='1/10/2017', freq='D'), 
      data=[5,5,2,1,3,4,5,6,7,8]) 
df=df.to_frame() 
df['New']=df.rolling(3).sum().shift(-2).values 
df.loc[df.New==df.New.min(),:].drop(0,1) 

Out[685]: 
      New 
2017-01-03 6.0 
+0

這是偉大的。爲了澄清我是否想將窗口大小更改爲4(作爲示例),它將是df ['New'] = df.rolling(4).sum()。shift(-3).values。那是對的嗎? – AJG519

+0

@ AJG519是的,你得到它 – Wen

+0

@ AJG519你可以接受這個最優秀的解決方案。 –