我正在处理时间序列价格数据,我想知道在接下来的 K 行中每一行的价格可以达到多高。
我可以考虑使用 .argmax()
以某种方式实现它,同时根据时间过滤数据帧,但是必须有一个更简单的内置解决方案。
例如:
Price
1 $10
2 $11
3 $15
4 $18
5 $13
6 $4
7 $25
对于 K=2,这是我想要的:
Price Highest_In_Next_2_Rows
1 $10 $15
2 $11 $18
3 $15 $18
4 $18 $13
5 $13 $25
6 $4 $25
7 $25 NaN
最佳答案
您可以使用 pandas 滚动和移位功能实现此目的。
基本上,您会找到前 k 个观测值的滚动最大值,然后将序列移动 k,这样 t 的最大值就是在 (t+1, ..., t+k) 上计算得出的值。
import pandas as pd
import numpy as np
ts = pd.Series([10, 11, 15, 18, 13, 4, 25])
k = 2
res = ts.rolling(k).max().shift(-k)
pd.concat([ts, res], axis = 1)
输出:
# 0 1
# 0 10 15.0
# 1 11 18.0
# 2 15 18.0
# 3 18 13.0
# 4 13 25.0
# 5 4 NaN
# 6 25 NaN
这个解决方案的问题是它没有给出最后 k 个观测值的结果。
解决方法如下: 您以相反的顺序考虑该系列并计算过去 k 个观察值的滚动最大值(在至少有一个观察值时给出结果)。 然后您延迟了一天,因为您不希望包含今天的价格,您再次反转以返回到原始订单。
res = ts[::-1].rolling(k,1).max().shift(1)[::-1]
它完全复制了所需的输出:
# 0 1
#0 10 15.0
#1 11 18.0
#2 15 18.0
#3 18 13.0
#4 13 25.0
#5 4 25.0
#6 25 NaN
关于python - 在 Pandas 的下一个 K 连续行中找到最高值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43921322/