如何从多级列名Pandas DataFrame提取ticker为另一DataFrame重索引
错误原因
你调用unstack()后得到的df是多级列索引结构:列的第一层是Close,第二层才是你需要的ticker值。你查看的df.index是行索引,确实为Date,但是你需要的ticker值存储在df的列索引的第二层,而非行索引中。
你直接传入df.columns.values给set_index时,传入的是包含两级索引信息的元组数组,set_index会默认尝试给df1设置两级行索引,但df1本身是单级索引结构,因此触发层级不匹配的报错。
解决方法
你只需要先取出df列的第二层ticker索引,再给df1设置索引即可,推荐两种写法:
- 创建
df1时直接指定索引,代码更简洁:
import numpy as np # 提取列索引第二层的所有ticker值 tickers = df.columns.get_level_values('ticker') # 生成随机DataFrame时直接指定行索引 data = np.random.random((df.shape[1], 100)) df1 = pd.DataFrame(data, index=tickers)
- 若你已经创建了
df1,直接修改索引属性即可,无需调用set_index:
tickers = df.columns.get_level_values('ticker') df1.index = tickers
内容的提问来源于stack exchange,提问作者agneau1236
相关产品推荐
相关产品推荐

