熊猫:找到最近的最高高位(OHLC)

时间:2020-07-18 02:21:11

标签: python pandas ohlc

我正在尝试找到最快的解决方案,以遍历每行打开高位低位关闭数据,并计算出当前行高点与下一个大于或等于原始高点之间的行数。这是一个简化的代码示例,我认为它可以很好地解释它(我将尝试查找#include<iostream> #include<vector> #include<string> using namespace std; int main() { vector<string> fruits; fruits.push_back("Apple"); fruits.push_back("Banana"); for(int i = 0; i<fruits.size(); i++){ for(auto& c : fruits[i]) { c = tolower(c); } cout << fruits[i] << endl; } } 的最终值):

_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]

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

2 个答案:

答案 0 :(得分:0)

根据我的理解,我们可以从当前行中减去所有值,然后获得上三阶值,并在值大于0时使用argmax获得索引最大值

样品:

s
0    1
1    2
2    1
3    3
4    1
5    1
6    5
dtype: int64

解决方案:

np.clip(np.triu((s.values-s.values[:,None])>0,0).argmax(1)-np.arange(len(s)),a_min=0, a_max=None)
array([1, 2, 1, 3, 2, 1, 0])

答案 1 :(得分:0)

使用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