从连续数据框值中获取最小值

时间:2018-12-02 04:50:03

标签: python pandas dataframe

我在Python熊猫中有一个数据框:

Date    Open High   Low last    Close
11/30/2018  289.5   290 284.8   286.2   285.8
11/29/2018  283.65  289.3   283.45  288.35  287.55
11/28/2018  285.4   287.95  280.8   282.2   282.2
11/27/2018  286.1   286.45  282.8   284.4   284.85
11/26/2018  281.25  286.35  280.7   285.5   285.65
11/22/2018  282 284.5   279.6   280 280.5
11/21/2018  284.5   284.8   280 282.65  281.75
11/20/2018  285 286.65  281.8   283.5   283.85

我一直在尝试通过以下操作来找到后续3个值的最小值与“当前数据框列”值之间的差:

min(np.array(df['Low'].shift(1),df['Low'].shift(2),df['Low'] > df['Low'].shift(3))) - **df.Low**

这将返回类似ValueError的错误:仅接受2个非关键字参数。

TIA,请帮忙。

1 个答案:

答案 0 :(得分:4)

使用rolling window function,将最小统计量上移3,然后减去原始DataFrame。

df - df.rolling(3).min().shift(-3)

>>> df
              Open    High     Low    last   Close
Date                                              
11/30/2018  289.50  290.00  284.80  286.20  285.80
11/29/2018  283.65  289.30  283.45  288.35  287.55
11/28/2018  285.40  287.95  280.80  282.20  282.20
11/27/2018  286.10  286.45  282.80  284.40  284.85
11/26/2018  281.25  286.35  280.70  285.50  285.65
11/22/2018  282.00  284.50  279.60  280.00  280.50
11/21/2018  284.50  284.80  280.00  282.65  281.75
11/20/2018  285.00  286.65  281.80  283.50  283.85
>>>
>>> df.rolling(3).min()
              Open    High    Low   last  Close
Date                                           
11/30/2018     NaN     NaN    NaN    NaN    NaN
11/29/2018     NaN     NaN    NaN    NaN    NaN
11/28/2018  283.65  287.95  280.8  282.2  282.2
11/27/2018  283.65  286.45  280.8  282.2  282.2
11/26/2018  281.25  286.35  280.7  282.2  282.2
11/22/2018  281.25  284.50  279.6  280.0  280.5
11/21/2018  281.25  284.50  279.6  280.0  280.5
11/20/2018  282.00  284.50  279.6  280.0  280.5
>>> 
>>> df.rolling(3).min().shift(-3)
              Open    High    Low   last  Close
Date                                           
11/30/2018  283.65  286.45  280.8  282.2  282.2
11/29/2018  281.25  286.35  280.7  282.2  282.2
11/28/2018  281.25  284.50  279.6  280.0  280.5
11/27/2018  281.25  284.50  279.6  280.0  280.5
11/26/2018  282.00  284.50  279.6  280.0  280.5
11/22/2018     NaN     NaN    NaN    NaN    NaN
11/21/2018     NaN     NaN    NaN    NaN    NaN
11/20/2018     NaN     NaN    NaN    NaN    NaN
>>> 
>>> df.rolling(3).min().shift(-3) - df
            Open  High   Low  last  Close
Date                                     
11/30/2018 -5.85 -3.55 -4.00 -4.00  -3.60
11/29/2018 -2.40 -2.95 -2.75 -6.15  -5.35
11/28/2018 -4.15 -3.45 -1.20 -2.20  -1.70
11/27/2018 -4.85 -1.95 -3.20 -4.40  -4.35
11/26/2018  0.75 -1.85 -1.10 -5.50  -5.15
11/22/2018   NaN   NaN   NaN   NaN    NaN
11/21/2018   NaN   NaN   NaN   NaN    NaN
11/20/2018   NaN   NaN   NaN   NaN    NaN
>>>