我是熊猫世界的新手,并且正在尝试找出构造数据框架的最佳做法,以对金融时间序列进行各种时间计算。
我当前正在导入定价时间序列,如下所示:
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' )
导入后,data_frames ['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之类的列。但这感觉不太正确。
感觉我必须缺少一种明显的方法来最好地处理数据。
谢谢!
答案 0 :(得分:0)
您可以将索引级别symbol
作为分类变量放到列中
df = data_frames.drop_index(level='symbols')
然后,您可以根据该列(df[df['type''] == 'SPY']
)选择数据,或按组(df.groupby('type').apply(som_func)
或“对于名称,df.groupby('type):...中的组”)执行操作。 )。
这在索引轴上也应该可行,但我更喜欢将其存储在列中