【发布时间】:2021-05-09 10:02:17
【问题描述】:
我正在从事一个股市分析项目。我正在尝试查找过去 5 天的最高价格、最高价格当天的交易量以及最高价格出现之前的天数。
我已经使用几个“for”循环构建了一个解决方案,但想找到一种更有效的方法来编写此代码而不使用“for”循环。任何建议将不胜感激。
A1 = pd.merge(A, B, left_index = True, right_index = True)
A1["Date"] = A1.index
A1.reset_index(inplace = True)
### 5 Day High and Volume
Indexes = []
for index in range(len(A1.index) - 5):
M = 0
H = 0
for i in range(1,6):
if H < A1.iloc[i+index,2]:
H = A1.iloc[i+index,2]
M = i+index
Indexes.append(M)
Vol = pd.DataFrame(columns = ['B','C'])
Vol5 = []
DH5 = []
Z = []
count = 0
for i in Indexes:
Vol5.append(A1.iloc[i,1])
DH5.append(A1.iloc[i,2])
Z.append(count - i)
count += 1
for i in range(5):
Vol5.append(np.nan)
DH5.append(np.nan)
Z.append(np.nan)
Vol['B'] = Vol5
Vol.index = A1['Date']
Vol['C'] = DH5
Vol['D'] = Z
【问题讨论】:
-
在不知道数据框列的情况下有点难以回答,但我认为 pandas 的 max 函数在这里会很有用:pandas.pydata.org/pandas-docs/stable/reference/api/…
-
列将是日期、开盘价、最高价、最低价、收盘价、成交量
-
我能够毫无问题地找到最大值。我遇到的困难是试图找到最大值当天的相关交易量以及发生最大值的第 N 天之前的多少天。
标签: python pandas dataframe numpy vectorization