将 pandas 数据帧旋转为具有多层的长格式
Posted
技术标签:
【中文标题】将 pandas 数据帧旋转为具有多层的长格式【英文标题】:Pivot pandas dataframe to long format with multiple layers 【发布时间】:2020-11-15 03:17:30 【问题描述】:| | Var1 Var2
|------------|------|------|-----|------|------|-----|
| | SPY | AAPL | MSFT| SPY | AAPL | MSFT
| Date | | | | | | |
| 2011-01-03 | 30 | 30 | 30 | 30 | 30 | 30 |
| 2011-01-04 | 30 | 30 | 30 | 21 | 30 | 30 |
| 2011-01-05 | 30 | 30 | 30 | 30 | 30 | 30 |
如何将上面的具有多层的数据框转换为如下所示的长格式? 预期输出如下所示:
| | firm | Var1 | Var2 |
|------------|------|------|------|
| Date | | | |
| 2011-01-03 | AAPL | 30 | 30 |
| 2011-01-04 | SPY | 30 | 30 |
| 2011-01-05 | MSFT | 30 | 30 |
样本数据:
df = pd.DataFrame([('Var1', 'SPY'): 30.0,
('Var1', 'AAPL'): 30.0,
('Var1', 'MSFT'): 30.0,
('Var2', 'SPY'): 30.0,
('Var2', 'AAPL'): 30.0,
('Var2', 'MSFT'): 30.0,
('Var1', 'SPY'): 30.0,
('Var1', 'AAPL'): 30.0,
('Var1', 'MSFT'): 30.0,
('Var2', 'SPY'): 21.0,
('Var2', 'AAPL'): 30.0,
('Var2', 'MSFT'): 30.0,
('Var1', 'SPY'): 30.0,
('Var1', 'AAPL'): 30.0,
('Var1', 'MSFT'): 30.0,
('Var2', 'SPY'): 30.0,
('Var2', 'AAPL'): 30.0,
('Var2', 'MSFT'): 30.0]
【问题讨论】:
您是从数据透视表开始的吗? 数据框自带多层。df.stack()
??我没有正确回答这个问题。你的输入和预期输出对我来说并不完全清楚。
为什么输出中只有三个元素(行)?
对不起,只是为了表达想法,应该更是的
【参考方案1】:
让我们重现第一个数据帧。
答:
SPL AAPL MSFT
2011-01-03 30 30 30
2011-01-04 30 30 30
2011-01-05 30 30 30
乙:
SPL AAPL MSFT
2011-01-03 30 30 30
2011-01-04 21 30 30
2011-01-05 30 30 30
A.columns = pd.MultiIndex.from_product([['Var1'], A.columns])
B.columns = pd.MultiIndex.from_product([['Var2'], B.columns])
df = pd.concat([A, B], axis = 1)
您当前的数据框df:
Var1 Var2
SPL AAPL MSFT SPL AAPL MSFT
2011-01-03 30 30 30 30 30 30
2011-01-04 30 30 30 21 30 30
2011-01-05 30 30 30 30 30 30
代码:
df = df.stack().reset_index().rename(columns='level_0':'Date', 'level_1': 'firm')
df.set_index(['Date'], inplace=True)
结果df:
firm Var1 Var2
Date
2011-01-03 AAPL 30 30
2011-01-03 MSFT 30 30
2011-01-03 SPL 30 30
2011-01-04 AAPL 30 30
2011-01-04 MSFT 30 30
2011-01-04 SPL 30 21
2011-01-05 AAPL 30 30
2011-01-05 MSFT 30 30
2011-01-05 SPL 30 30
【讨论】:
以上是关于将 pandas 数据帧旋转为具有多层的长格式的主要内容,如果未能解决你的问题,请参考以下文章
python使用pandas将mysql数据表转为excel表格