我有类似以下数据框的内容:
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
如果有多个窗口具有相同的最小总和,则结果可能会有每个窗口的记录。
答案 0 :(得分:8)
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