【发布时间】:2021-03-23 11:13:27
【问题描述】:
首先我将分享运行python代码的目标。
- 从雅虎获取股票的每日最高价和最低价。
- 将每日最高价和最低价转换为每周最高/最低价、每月最高最低价、每年最高最低价。
- 从每日数据框中获取每周或每月最高低点的确切日期
- 最后,在获取每周(或每月)高点和低点的日期后,我想整理一周内第一个高点或低点发生的数据。例如。在截至 2020 年 12 月 12 日的一周内,我得到本周最高价为 100,周最低价为 97(在完成第 2 步后)以及每日数据帧中的最高价和最低价(从第 3 步开始),我想将价格安排在发生的顺序。所以如果高位发生在 12 月 9 日,低位发生在 12 月 12 日。价格将在第 1 行排列为 100,然后在第 2 行排列为 97,此过程将针对整个数据框重复。
我能够实现的目标。 我已经完成了第1步和第2步。目前在第3步中挣扎。
已完成第 1 步
import pandas as pd
import yfinance as yf
Ticker = '^NSEI'
f = yf.download(Ticker,period="max")
f = f.drop(['Adj Close'], axis=1)
f = f.drop(['Open'], axis=1)
f = f.drop(['Close'], axis=1)
f = f.drop(['Volume'], axis=1)
f.reset_index(inplace=True)
f.insert(0,'Ticker',Ticker)
第 2 步
fw = f.groupby(['Ticker', pd.Grouper(key='Date', freq='W')])\
.agg(High=pd.NamedAgg(column='High', aggfunc='max'),
Low=pd.NamedAgg(column='Low', aggfunc='min'))\
.reset_index()
fm = f.groupby(['Ticker', pd.Grouper(key='Date', freq='M')])\
.agg(High=pd.NamedAgg(column='High', aggfunc='max'),
Low=pd.NamedAgg(column='Low', aggfunc='min'))\
.reset_index()
fq = f.groupby(['Ticker', pd.Grouper(key='Date', freq='Q')])\
.agg(High=pd.NamedAgg(column='High', aggfunc='max'),
Low=pd.NamedAgg(column='Low', aggfunc='min'))\
.reset_index()
fy = f.groupby(['Ticker', pd.Grouper(key='Date', freq='Y')])\
.agg(High=pd.NamedAgg(column='High', aggfunc='max'),
Low=pd.NamedAgg(column='Low', aggfunc='min'))\
.reset_index()
在第 3 步中挣扎。使用了 pd.merge、pd.join、pd.concat,但无法将每周数据帧与高点和低点的数据帧结合起来。当指定保持最后时,通过执行合并和删除重复来增加每周记录的数量也不能正常工作。
因此,如果你们都可以在第 3 步和第 4 步中帮助我,将不胜感激。 谢谢
【问题讨论】: