如何使用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
相关产品推荐
相关产品推荐

