如何将此Pandas iterrows向量化并加速?

3

我不明白如何在apply()或类似函数中使用先前的索引。

这是代码:

for i, row in data.iterrows():

    index = data.index.get_loc(i)
    
    if index == 0:
        pass
    else:

    # changes
    data.at[i, '1_Day_%_Change'] = ( data.at[data.index[index], 'Adj_Close'] / data.at[data.index[index-1], 'Adj_Close'] ) - 1
    data.at[i, '5_Day_%_Change'] = data.at[data.index[index], 'Adj_Close'] / data.at[data.index[index-5], 'Adj_Close'] - 1
    data.at[i, '1_Month_%_Change'] = data.at[data.index[index], 'Adj_Close'] / data.at[data.index[index-21], 'Adj_Close'] - 1
    data.at[i, '6_Monthr_%_Change'] = data.at[data.index[index], 'Adj_Close'] / data.at[data.index[index-151], 'Adj_Close'] - 1
    data.at[i, '1_Year_%_Change'] = data.at[data.index[index], 'Adj_Close'] / data.at[data.index[index-252], 'Adj_Close'] - 1 

data是数据框,目标只是为了计算股票价格的百分比变化。我所做的就是将当前行的'Adj Close'价格除以X行之前的价格。

我该如何加快速度?

1个回答

2

使用 diffshift 方法。示例代码在此处。

df['1_Day_%_Change'] = df['Adj_close'].diff() / df['Adj_close'].shift(1)
df['5_Day_%_Change'] = df['Adj_close'].diff(5) / df['Adj_close'].shift(5)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接