小能豆

Pandas:寻找最近的更高高点(OHLC)

py

我正在尝试找到最快的解决方案来迭代每一行开盘高低收盘数据,并计算出当前行的最高价与下一个最高价之间有多少行大于或等于原始值。这是一个简化的代码示例,我认为它很好地解释了这一点(我会尝试找到的最终值_next):

for i in df.index:
    while df.loc[i, 'high'] > df.loc[_next, 'high']:
         _next += 1

我觉得我需要使用一个lambda内部函数apply,但似乎做不到。我花了好几天时间才弄清楚,希望能得到任何建议!

使用此数据,函数应该返回[2, 0, 0, 3, 1, 0, 0]

d = {'high': [1.2, 1.1, 1.1, 1.4, 1.3, 1.2, 1.3]}
df = pd.DataFrame(data=d)


    high   rows_to_higher_high
0   1.2    2
1   1.1    0
2   1.1    0
3   1.4    3
4   1.3    1
5   1.2    0
6   1.3    0

编辑:itertuples(name=None,index=True)是迄今为止最快的方法。


阅读 6

收藏
2025-01-13

共1个答案

小能豆

使用list comprehension 并获取index to list

In [166]: d = {'high': [1.2, 1.1, 1.1, 1.4, 1.3, 1.2, 1.3]}

In [167]: df = pd.DataFrame(data=d)

In [168]: df['rows_to_higher_high']=[(df['high'].values[i+1:]>=val).tolist().index(True) if True in (df['high'].values[i+1:]>=val).tolist() else le
     ...: n((df['high'].values[i+1:]>=val).tolist())  for i, val in enumerate(df['high'].values)]

In [169]: df
Out[169]:
   high  rows_to_higher_high
0   1.2                    2
1   1.1                    0
2   1.1                    0
3   1.4                    3
4   1.3                    1
5   1.2                    0
6   1.3                    0
2025-01-13