gpt4 book ai didi

python - 将 Pandas 数据帧转为具有多层的长格式

转载 作者:行者123 更新时间:2023-12-03 16:59:25 24 4
gpt4 key购买 nike

|            |          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}]

最佳答案

让我们重现数据框 1st。
答:

            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

关于python - 将 Pandas 数据帧转为具有多层的长格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63087420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com