【问题标题】:how to best structure multiple time series for multiple stocks?如何最好地为多个股票构建多个时间序列?
【发布时间】:2019-04-30 03:32:04
【问题描述】:

我是 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' )

导入后,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 之类的列。但这感觉不太对。

感觉我一定是错过了如何最好地处理数据的明显方法。

提前致谢!

【问题讨论】:

  • pdr 未在您的代码中定义。你能定义它吗?
  • @anon01 我猜那是熊猫数据阅读器
  • 尝试一次将所有股票代码放入列表中。 df = pdr.get_data_tiingo(TICKERS, start = START_DATE, api_key='xxxxxxxx')

标签: pandas


【解决方案1】:

您可以将索引级别 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): ...')。

这在索引轴上也应该是可能的,但我更喜欢将它存储在列中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多