【问题标题】:How to replace 'for' loop with more efficient code for stock market analysis example如何用更有效的代码替换“for”循环以进行股市分析示例
【发布时间】: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


【解决方案1】:

我建议使用rolling 方法查找前5行计算的最大值的索引:

import pandas as pd
import numpy as np

d={'date':np.random.random(10), 'open':np.random.random(10), 'high':np.random.random(10), 'low':np.random.random(10), 'close':np.random.random(10), 'volume':np.random.random(10)}    
A1=pd.DataFrame(data=d)

df=A1.rolling(window=5).apply(np.argmax).shift(1).fillna(0)

然后找到与此最大值相关的音量(在此示例中为highest 列):

A1['volume associated with maximum price']=A1.iloc[df.high]['volume']

【讨论】:

    猜你喜欢
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多