gpt4 book ai didi

python - Pandas 数据框搜索超过阈值的行

转载 作者:行者123 更新时间:2023-12-01 09:10:29 25 4
gpt4 key购买 nike

我有一个像这样的数值数据的数据框:

Day          High         Low      
01/01/01 200 100
02/01/01 210 100
03/01/01 190 110

每行,我根据某个公式动态生成高目标和低目标:

Day          High         Low      High-Target  Low-Target
01/01/01 200 100 300 70
02/01/01 210 100 315 70
03/01/01 190 110 285 77

每天而言,我想知道,高目标( future 高点 > 高目标)是否首先被随后的高点击中,还是低目标(低目标 < future 低点)首先被随后的低点穿越?请注意,这是按天计算的 - 我想用结果“首先命中高目标”或“首先命中低目标”来标记每一行。

为了让这一点更清楚,让我们根据后续数据标记前三天。

Day          High         Low      High-Target  Low-Target   Hit First
01/01/01 200 100 300 70 HIGH
02/01/01 210 100 315 70 LOW
03/01/01 190 110 285 77 HIGH

04/01/01 310 120
05/01/01 310 65
06/01/01 300 120

因此,对于 01/01,在 04/01 那天超出了 300 的目标,然后在第二天 (05/01) 达到了 70 的目标。因此,首先超出了 HIGH 目标。

2001 年 2 月,未突破 315 的高目标,但 05 月 1 日突破了 70 的低目标,因此首先突破了低目标。

2001 年 3 月,2001 年 4 月突破了 285 的高目标,2001 年 5 月突破了 77 的低目标。因此,高目标首先被突破。

最有效的方法是什么?我正在考虑使用 .apply 搜索整个数据帧,也许还可以比较 ids 以查看首先命中哪个目标。

需要明确的是 - 我拥有 3000 天的整个数据框。我所说的“后续数据”只是指该系列的后续数据。

最佳答案

.apply 确实可以在这里使用,带有自定义函数(需要引用整个数据帧 df)。

def get_hit_first(row):
# Get a temporary view on the subsequent rows
temp = df.loc[row.name:].iloc[1:]
# Find the first row matching the criteria
head = temp[(temp.High >= row['High-Target'])|(temp.Low <= row['Low-Target'])]\
.head(1)

if len(head) > 0:
if head.iloc[0].High >= row['High-Target']:
return 'HIGH'
else:
return 'LOW'

df['Hit First'] = df.apply(get_hit_first, axis=1)

但这可能不是最佳解决方案,因为比较是在所有后续行上执行的。

关于python - Pandas 数据框搜索超过阈值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51696639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com