You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas为DataFrame设置以Ticker为一级列、行情指标为二级列的分层列结构?

如何用Pandas实现DataFrame的列层级转换?

刚好我之前处理过类似的需求,你可以通过Pandas的pivot结合层级调整的方法轻松实现这个转换,具体步骤如下:

1. 先回顾你的原始DataFrame

首先确认你的初始数据结构(已经按日期索引,包含ticker及各类行情字段):

import pandas as pd

# 创建原始DataFrame
df = pd.DataFrame(index=['2018-01-01','2018-01-02','2018-01-03','2018-01-04'])
df["ticker"] = ['TSLA', 'TSLA', 'IBM', 'IBM']
df["price"] = ['1000', '1200', '101', '108']
df["volume"] = ['100000', '123042', '1087878', '108732']
df["marketcap"] = ['1.2T', '1.4T', '30B', '35B']
df.index.rename('Date', inplace=True)

2. 核心转换代码

只需要一行(或者拆分步骤更清晰)就能完成你要的列层级重构:

# 一步到位实现转换
result_df = df.pivot(columns='ticker').swaplevel(axis=1).sort_index(axis=1)

3. 代码解释

咱们拆解开看每一步做了什么:

  • df.pivot(columns='ticker'):把ticker列的唯一值(TSLA、IBM)转成新的列维度,同时原来的price/volume/marketcap会自动变成二级列。不过这一步后列的层级是**[行情字段, 股票代码]**,和你要的顺序相反。
  • swaplevel(axis=1):交换列的两层层级,把**股票代码(ticker)**放到外层(一级列),行情字段放到内层(二级列),正好匹配你的需求。
  • sort_index(axis=1):对列进行排序,让同一个股票代码下的二级列(price/volume/marketcap)集中在一起,结构更规整。

4. 最终结果

运行后你会得到完全符合预期的DataFrame:

ticker      TSLA                          IBM                    
          price  volume marketcap price    volume marketcap
Date                                                        
2018-01-01  1000  100000     1.2T   NaN       NaN      NaN
2018-01-02  1200  123042     1.4T   NaN       NaN      NaN
2018-01-03   NaN     NaN       NaN   101  1087878       30B
2018-01-04   NaN     NaN       NaN   108   108732       35B

内容的提问来源于stack exchange,提问作者MathMan 99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:17:32