Python 高值大于当前高值的最短时间

Python 高值大于当前高值的最短时间,python,pandas,date,time,Python,Pandas,Date,Time,我想知道在一个数据帧内,第一个最小时间“高”大于当前高 例如,我有一个包含以下列的数据框: df["date"] df["open"] df["high"] df["low"] df["close"] 我想知道高点大于当前高点的最小日期,这是我到目前为止得到的: import pandas as pd import numpy as np df = pd.read_csv("spy10mindata.csv") df.columns = [x.lower() for x in df.colum

我想知道在一个数据帧内,第一个最小时间“高”大于当前高

例如,我有一个包含以下列的数据框:

df["date"]
df["open"]
df["high"]
df["low"]
df["close"]
我想知道高点大于当前高点的最小日期,这是我到目前为止得到的:

import pandas as pd
import numpy as np
df = pd.read_csv("spy10mindata.csv")
df.columns = [x.lower() for x in df.columns]
df["date"] = pd.to_datetime(df['datetime'], dayfirst=True)
df = df.sort_values(["date"], ascending=[True])
df['just_date'] = df['date'].dt.date
df['just_date2'] = df['date'].dt.date
df['just_time'] = df['date'].dt.time
df["numdate"] = df['date'].dt.strftime("%Y%m%d").astype(int)
df["numtime"] = df['date'].dt.strftime("%H%M%S").astype(int)

df["try"] = np.where(df["high"] > df["high")) 
“”


但是在这个分析中无法克服这个问题。如果你能帮我,我很感激你,也许可以用滚动窗口来完成,但我不知道

我迭代行以获得当前的
高值
,并创建
sub_df
,所有行都位于该值之后

顺便说一句:我使用
random
创建一些示例数据。因为我使用了
seed()
,所以每次执行时都应该得到相同的值,所以值不是那么随机

import pandas as pd
import random

random.seed(0)

df = pd.DataFrame({
    'date': pd.date_range(start='2020.05.01 12:00', periods=10, freq='d'),
    'high': [random.randint(0, 10) for _ in range(10)],
})

print(df)

df['higher_value'] = None
df['higher_data'] = None
df['higher_index'] = None

for index, row in df.iterrows():
    print('current: row:', index, 'high:', row['high'])

    sub_df = df[index+1:] 
    higher_items = sub_df[ sub_df['high'] > row['high'] ]

    if len(higher_items):
        first = higher_items.iloc[0]
        print(' higher: row:', first.name, 'high:', first['high'])
        df['higher_value'][index] = first['high']
        df['higher_index'][index] = first.name
        df['higher_data'][index] = first['date']

    else:
        print(' higher: None')

    print('---')

print(df)    
之前:

                 date  high
0 2020-05-01 12:00:00     6
1 2020-05-02 12:00:00     6
2 2020-05-03 12:00:00     0
3 2020-05-04 12:00:00     4
4 2020-05-05 12:00:00     8
5 2020-05-06 12:00:00     7
6 2020-05-07 12:00:00     6
7 2020-05-08 12:00:00     4
8 2020-05-09 12:00:00     7
9 2020-05-10 12:00:00     5
之后:

                 date  high higher_value          higher_data higher_index
0 2020-05-01 12:00:00     6            8  2020-05-05 12:00:00            4
1 2020-05-02 12:00:00     6            8  2020-05-05 12:00:00            4
2 2020-05-03 12:00:00     0            4  2020-05-04 12:00:00            3
3 2020-05-04 12:00:00     4            8  2020-05-05 12:00:00            4
4 2020-05-05 12:00:00     8         None                 None         None
5 2020-05-06 12:00:00     7         None                 None         None
6 2020-05-07 12:00:00     6            7  2020-05-09 12:00:00            8
7 2020-05-08 12:00:00     4            7  2020-05-09 12:00:00            8
8 2020-05-09 12:00:00     7         None                 None         None
9 2020-05-10 12:00:00     5         None                 None         None

我能理解你在“高”和当前的“高”上想做什么,你能更详细地说明你想在最短日期做什么吗?是的,当然,谢谢你的时间。所以我想知道什么时候最短时间(刚好时间列)里的high>大于当前的high。因此,让我们假设上午9:30:00的最高点是每股10美元。我想知道当天它第一次打破了当天的最高点。所以如果是上午10:00,我想让这一排说10:00:00。在这种情况下,df['try']的其他值应该是什么?一开始,它们都被设置为0,当当前高>高时,该行获得新的时间戳,而对于其他行,当前高从不>高,它们保持为0,这可以吗?对于这个特定的策略,我需要得到比当前高更大的高。我在想,也许在当前行之后的所有行中循环一次,然后得到比当前高点更大的第一行?这行吗?如果您知道当前高位行号,那么使用slice
[current\u row+1:][/code>获取当前高位之后的所有行,然后将这些行与单个值进行比较,而不是比较
结果=df[df[“high”][current\u row+1:]>current\u high]
然后得到第一个值
结果[0]
这就解决了问题,非常感谢您抽出时间。。。我现在唯一的问题是要花很多时间才能通过1行。除了这是一个完美的解决方案之外,这是唯一的问题。迭代对大数据不好,因为它不使用内部C/C++代码。我想到了
rolling()
窗口,但我不知道它是否可以使用windos,每行的大小都在变化。