如何将多索引列转换为熊猫数据框的单索引列?
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)
【讨论】:
以上是关于如何将多索引列转换为熊猫数据框的单索引列?的主要内容,如果未能解决你的问题,请参考以下文章