如何将多索引列转换为熊猫数据框的单索引列?

Posted

技术标签:

【中文标题】如何将多索引列转换为熊猫数据框的单索引列?【英文标题】:How to convert multi-index columns to single index-column for pandas dataframe? 【发布时间】:2021-12-08 21:06:15 【问题描述】:

我有一个从 Yahoo Finance 检索到的多索引数据框列,并希望将其转换为单索引列表。而不是让每个符号(SPY,AMZN)对应于属性(高,低,收盘),我需要一个带有符号名称的额外列。新的交易品种列将具有重复的交易品种名称,因为它显示了每个交易日的最高价/最低价/收盘价。

以下是我想要的示例输出。 Sample Output

以下是雅虎财经在该数据帧上填充的多索引数据帧。 Multi-index dataframe

这是从 Yahoo Finance 检索数据的代码。

#Import libraries
from pandas_datareader import data 
import pandas as pd
import numpy as np

tickers = ['SPY','APPL','GOOGL'] 
start_date = '2020-01-01'
end_date = '2020-12-31'
panel_data = data.DataReader(tickers,'yahoo', start_date, end_date)

relv_data = panel_data[['High','Low','Close']]

#Inspect first 5 columns of pandas dataframe
print(relv_data.head())

#Display columns attributes
print(relv_data.columns)

希望熊猫数据框专家可以帮助我解决这个问题。谢谢!

【问题讨论】:

【参考方案1】:

使用df.groupby() 拆分每个索引,使用droplevel() 删除股票标签

for name, data in relv_data.groupby(level=1, axis=1):
    print(f"----------name----------")
    data.columns = data.columns.droplevel(1)
    print(data)

你可以concat他们的:

tickers_data = []
for ticker, data in relv_data.groupby(level=1, axis=1):
    data.columns = data.columns.droplevel(1)
    data = data.reset_index()
    data.insert(0, 'ticker', ticker)
    tickers_data.append(data)

result = pd.concat(tickers_data)

【讨论】:

以上是关于如何将多索引列转换为熊猫数据框的单索引列?的主要内容,如果未能解决你的问题,请参考以下文章

枢轴熊猫数据框具有多索引列

ValueError 将多索引熊猫数据框转换为 Excel

熊猫将第一个多索引转换为行索引,将第二个多索引转换为列索引

如何将熊猫数据框转换为多索引数据框

使熊猫具有多索引列的多个数据框并完全连接

无法加入熊猫中的数据框