用pandas更有效的方法计算具有循环依赖关系的两个序列

2024-10-01 02:24:47 发布

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

我有一个代表股票收益的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值。在

上面的方法是可行的,但是在loop部分它非常慢。有没有更有效的方法让我在熊猫身上做到这一点?考虑到“循环”依赖关系(考虑到滞后,实际上不是循环的),我不确定如何进行正则数列运算或使用普通的移位操作(例如,我对Cash Return所做的那样)。在


Tags: 方法nonetrueconvertdatareturnstartend