移动窗口中的熊猫总数最少

时间:2017-10-06 18:52:00

标签: python pandas

我有类似以下数据框的内容:

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

如果有多个窗口具有相同的最小总和,则结果可能会有每个窗口的记录。

1 个答案:

答案 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