我找不到用 Python 和 Dataframes 解决这个逻辑挑战的方法,在 nr 行中搜索最低值,其中行的 nr 取决于之前的计算。
注意: 我几乎是 python 和数据帧的入门级——如果我没有使用最好的代码或格式,我深表歉意。随时纠正或提出改进建议,以便我学习。
df.columns=['Timestamp', 'Open', 'High', 'Low', 'Close', 'Volume']
df['Timestamp'] = pd.to_datetime(df['Timestamp'], unit='ms')
df.set_index('Timestamp', inplace=True)
maxframes = 5
df['max5'] = df['High'].shift(-maxframes).rolling(maxframes).max()
这导致:
时间戳 | 打开 | 高 | 低 | 关闭 | 音量 | 最大5 |
---|---|---|---|---|---|---|
2023-02-01 00:00:00 | 23125.13 | 23140.47 | 23124.41 | 23133.74 | 199.09155 | 23168.90 |
2023-02-01 00:01:00 | 23133.74 | 23137.00 | 23123.15 | 23123.24 | 153.92866 | 23168.90 |
2023-02-01 00:02:00 | 23123.16 | 23145.99 | 23123.01 | 23142.98 | 204.22769 | 23168.90 |
2023-02-01 00:03:00 | 23144.00 | 23168.90 | 23141.75 | 23157.56 | 385.73800 | 23159.26 |
2023-02-01 00:04:00 | 23158.68 | 23159.26 | 23131.97 | 23133.11 | 209.27799 | 23136.90 |
2023-02-01 00:05:00 | 23133.11 | 23136.90 | 23086.73 | 23087.06 | 514.67716 | 23112.84 |
2023-02-01 00:06:00 | 23087.06 | 23112.84 | 23084.00 | 23101.51 | 425.65720 | |
2023-02-01 00:07:00 | 23100.03 | 23105.14 | 23086.08 | 23086.35 | 272.72273 | |
2023-02-01 00:08:00 | 23086.35 | 23104.53 | 23084.35 | 23090.76 | 218.65485 | |
2023-02-01 00:09:00 | 23089.85 | 23091.31 | 23059.90 | 23067.90 | 558.62597 |
挑战: max5 在接下来的 4 行的 High 列中产生最大值。 对于每一行,我需要在下一行中找到列 Low 中的最低值(=从这一行直到找到 max5 的那一行)。
示例对于第 1 行(= 2023-02-01 00:00:00) max5 = 23168.90,发现于 2023-02-01 00:03:00 从 2023-02-01 00:00:00 到 2023-02-01 00:03:00 的最低点是 23123.01
我想我需要创建一个 lambda 或一个单独的函数并在应用程序中使用它。
lambda 似乎更适合较短的逻辑,这有点太复杂了
有了一个功能,我遇到了下一个问题: