我在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,请帮忙。
答案 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
>>>