Python:如何遍历pandas层级列,提取各股票代码对应的每日价格数据
多级列索引DataFrame提取各股票每日价格的实现方案
前提说明
你的DataFrame列采用两级索引结构:
- 第0级(外层):股票代码(TSLA、IBM等)
- 第1级(内层):指标类型(price、volume、marketcap)
你需要的是提取每个股票对应的每日price数据。
方案1:一次性提取所有股票的价格表(推荐)
不需要遍历,直接用pandas多级索引筛选即可,代码如下:
# 先修正你原有代码的赋值问题:把重排后的结果赋值给df df = df.set_index('ticker', append=True).unstack('ticker').swaplevel(axis=1).sort_index(axis=1,level=0, sort_remaining=False) # 筛选所有股票的price列 df_prices = df.loc[:, pd.IndexSlice[:, 'price']] # 去掉内层的price索引,列名直接显示为股票代码 df_prices.columns = df_prices.columns.droplevel(1)
得到的df_prices结构如下:
| Date | TSLA | IBM |
|---|---|---|
| 2018-01-01 | 1000 | NaN |
| 2018-01-02 | 1200 | NaN |
| 2018-01-03 | NaN | 101 |
| 2018-01-04 | NaN | 108 |
方案2:遍历每个股票单独提取价格列
如果你需要逐只股票处理,单独生成每个股票的价格DataFrame,用如下代码:
# 获取所有唯一的股票代码 tickers = df.columns.get_level_values(0).unique() for ticker in tickers: # 提取单只股票的price列,生成单列DataFrame,列名为股票代码 single_ticker_price = df.xs('price', level=1, axis=1)[ticker].to_frame() # 这里添加你对single_ticker_price的处理逻辑 print(single_ticker_price)
每次循环输出的single_ticker_price完全符合你给出的示例格式,比如TSLA的输出:
TSLA Date 2018-01-01 1000 2018-01-02 1200 2018-01-03 NaN 2018-01-04 NaN
内容的提问来源于stack exchange,提问作者MathMan 99
相关产品推荐
相关产品推荐

