问题描述
这是一个数据框,其中包含来自 OHLC
的 2011-2021
分钟数据
我想创建另一列名为 "first15 high"
的列,其中我想要 first 15 minute high
,即当天 9:15 至 9:30 的最高点。
所需的输出(在黄色列中)如下。 Dataframe 拥有超过 10 年的数据(即包含超过 2000 天)。
解决方法
您提供的数据保存在 excel 中,但我会假设 pandas 可用来回答。作为示例数据,从 Yahoo Finance 获取数据并首先创建按年、月和日分组的前五个数据框。按日期对创建的数据框进行分组并找到最大值。将获得最大值的数据帧与原始数据帧合并。如果您正在寻找快速答案,则必须以文本形式发布数据并提供您正在处理的代码。
import pandas as pd
import yfinance as yf
df = yf.download("AAPL",interval='1m',start="2021-05-18",end="2021-05-25")
df.index = pd.to_datetime(df.index)
df.index = df.index.tz_localize(None)
df['date'] = df.index.date
# first 5 records by day
first_15min = df.groupby([df.index.year,df.index.month,df.index.day])['High'].head(15).to_frame()
# max value
first_15min = first_15min.groupby([first_15min.index.date]).max()
df.merge(first_15min,left_on='date',right_on=first_15min.index,how='inner')
Open High_x Low Close Adj Close Volume date High_y
0 125.980003 126.099998 125.970001 126.065002 126.065002 0 2021-05-17 126.099998
1 126.060097 126.070000 125.900002 125.910004 125.910004 135988 2021-05-17 126.099998
2 125.900002 125.900002 125.790298 125.880096 125.880096 172001 2021-05-17 126.099998
3 125.889999 125.889999 125.790001 125.860001 125.860001 81338 2021-05-17 126.099998
4 125.870003 125.968201 125.870003 125.919998 125.919998 187059 2021-05-17 126.099998
... ... ... ... ... ... ... ... ...
1942 127.490097 127.557404 127.480003 127.540001 127.540001 161355 2021-05-24 126.419998
1943 127.540001 127.559998 127.480003 127.485001 127.485001 143420 2021-05-24 126.419998
1944 127.485001 127.529999 127.449997 127.480003 127.480003 132487 2021-05-24 126.419998
1945 127.479897 127.500000 127.449997 127.470001 127.470001 98478 2021-05-24 126.419998
1946 127.480003 127.550003 127.460098 127.532303 127.532303 128118 2021-05-24 126.419998