Python 数据框 - 在行内的不同列上滚动最大和最小搜索,直到最大

问题描述 投票:0回答:0

我找不到用 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 似乎更适合较短的逻辑,这有点太复杂了

有了一个功能,我遇到了下一个问题:

  1. 我找不到返回 High 列中找到的 max5 值的 rowid 或 rownr 的数据框函数
  2. 我找不到如何计算该列中低列中的最低值,在接下来的行中,直到找到 max5 的行
python dataframe lambda apply rolling-computation
© www.soinside.com 2019 - 2024. All rights reserved.