2

我有两个需要加入的时间序列:

第一个是这样的价格时间序列

ticker date       price 
SBUX   01/01/2012 55

第二个时间序列是调整因子,表示为

ticker start_date end_date    adjustment_factor
SBUX   01/01/1993 01/01/1994  0.015

如何在熊猫中将这些时间序列连接在一起以表达调整后的价格

adjusted_price = historical_prices * adjustment_factor

我知道我需要使用 date_range 函数将 adjust_factor 间隔时间序列扩展为每日序列。但问题是调整时间序列的每一行都将有不同的日期范围 - 有没有办法为整个调整因子时间序列从间隔日期类型批量转换,而不是对每一行进行转换。

我已经发现我需要将第一个时间点时间序列转为行情进入列并将日期转换为行,而第二个时间序列将间隔扩展为每日粒度并对其进行转轴(通过 dataframe.pivot 函数。通过结合两个数据框可以编写我需要的功能。

4

1 回答 1

0

您可以简单地将 dataFrame 与您的每日柱连接,并使用 fillna(method="ffill") 向前填充先前的值。在您的示例中,您有一个范围的调整因子。

#suppose sbux is an ohlc daily bar and adj is your adjustment factors  
adj  = pandas.DataFrame({"adj":pandas.Series(values,index = start_dates)})
sbux_with_adj  = sbux.join(adj)
sbux_with_adj["Adj"] =    sbux_with_adj["Adj"].fillna(method="ffill")
ohlc = sbux_with_adj[["Open","High","Low","Close"]] * sbux_with_adj["adj"]

我会通过以下方式使用更常见的调整因子(例如 0.985 获得 1.5% 的股息)进行调整:

sbux_with_adj  = sbux.join(adj)
sbux_with_adj["Adj"] =    sbux_with_adj["Adj"].fillna(1.0)
#now reverse cumulated adjustment.
cumulated_adj = sbux_with_adj["Adj"].cumprod().values[::-1] 
ohlc = sbux_with_adj[["Open","High","Low","Close"]] * cumulated_adj
于 2012-10-16T13:02:38.973 回答