如何用更有效的股票市场分析示例代码替换“for”循环

2024-10-01 04:53:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个股票市场分析项目。我试图找出过去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

Tags: intrueforindexa1countnprange
1条回答
网友
1楼 · 发布于 2024-10-01 04:53:27

我建议使用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']

相关问题 更多 >