我是Pandas世界的新手,我正试图找出构建数据框架的最佳实践,以便对金融时间序列进行各种时间计算。
我目前正在导入定价时间序列如下:
data_frames = { }
START_DATE = '2000-01-01'
TICKERS = [ 'SPY', 'VWO', 'TLT']
for ticker in TICKERS:
data_frames[ticker] = pdr.get_data_tiingo( ticker, start = START_DATE, api_key='xxxxxxxx' )
导入之后,数据帧['SPY']的前几列如下所示:
adjClose adjHigh adjLow adjOpen adjVolume \
symbol date
SPY 2000-01-03 101.407597 103.368638 100.318130 103.368638 8164300
2000-01-04 97.441937 100.448866 97.365652 100.078415 8089800
2000-01-05 97.616251 98.683897 95.698789 97.572673 12177900
2000-01-06 96.047419 98.662140 96.047419 97.354779 6227200
如果我想进行比较时间序列的计算,那么组合三个代码的时间序列的推荐方法是什么。我的第一个想法是我应该连接数据帧
dfs_concat = pd.concat( [data_frames['SPY'], data_frames['VWO'], data_frames['TLT']] )
然后使用apply函数
dfs_concat.apply( some_cross_asset_calculation_here, axis = 1 )
但在some_cross_asset_calculation_here()中,我可以访问一个自动收报机的数据帧行,但不能访问其他代码。
我想我可以在每个自动收报机的一个数据框中创建列,这样我就有了SPY_adjClose,SPY_adjOpen,TLT_adjClose,TLT_adjOpen等列。但这感觉不太对劲。
感觉我必须错过一个如何最好地处理数据的明显方法。
提前致谢!
您可以将索引级别symbol
作为分类变量放入列中
df = data_frames.drop_index(level='symbols')
然后,您可以根据该列(df[df['type''] == 'SPY']
)选择数据或执行每组操作(df.groupby('type').apply(som_func)
或`for name,group in df.groupby('type):...')。
这也应该可以在索引轴上进行,但我更喜欢将其存储在列中