gpt4 book ai didi

python - pandas - 计算具有循环依赖性的两个系列的更有效方法

转载 作者:行者123 更新时间:2023-11-28 16:47:59 25 4
gpt4 key购买 nike

我有一个代表股票 yield 的 DataFrame。拆分调整收盘价,我有以下方法:

def returns(ticker, start=None, end=None):
p = historical_prices(ticker, start, end, data='d', convert=True)
d = historical_prices(ticker, start, end, data='v', convert=True)

p['Dividends'] = d['Dividends']
p['Dividends'].fillna(value=0, inplace=True)
p['DivFactor'] = 1.
p['SAClose'] = p['Close']

records, fields = p.shape
for t in range(1, records):
p['SAClose'][t] = p['Adj Close'][t] / p['DivFactor'][t-1] + \
p['Dividends'][t-1]
p['DivFactor'][t] = p['DivFactor'][t-1] * \
(1 - p['Dividends'][t-1] / p['SAClose'][t])

p['Lagged SAClose'] = p['SAClose'].shift(periods=-1)
p['Cash Return'] = p['Dividends'] / p['Lagged SAClose']
p['Price Return'] = p['SAClose'] / p['Lagged SAClose'] - 1
return p.sort_index()

请注意 SAClose(即拆分调整收盘价)如何取决于滞后的 DivFactor 值。反过来,DivFactor 取决于滞后的 DivFactor 值以及当前的 SAClose 值。

上面的方法可行,但在循环部分它非常慢。有没有更有效的方法让我在 Pandas 中做到这一点?鉴于“循环”依赖性(考虑到滞后并不是真正的循环),我不确定如何进行常规系列数学运算或使用正常的移位操作(例如,就像我对 Cash Return 所做的那样)。

最佳答案

您可以尝试在一次拍摄中创建一个累积调整因子系列,然后您不需要循环:

(p['Dividends'].fillna(1.) + 1.).cumprod()

关于python - pandas - 计算具有循环依赖性的两个系列的更有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11787883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com