Pandas 将数据框与保留索引名称的多索引连接起来

Pandas concatenate dataframe with multiindex retaining index names

我有一个 DataFrame 列表,列表中的每个 DataFrame 如下:

dfList[0]
monthNum        1      2 
G1                                
2.0           0.05  -0.16
3.0           1.17   0.07
4.0           9.06   0.83

dfList[1]
monthNum        1      2 
G2                                
21.0           0.25   0.26
31.0           1.27   0.27
41.0           9.26   0.23

dfList[0].index
Float64Index([2.0, 3.0, 4.0], dtype='float64', name='G1')
dfList[0].columns
Int64Index([1, 2], dtype='int64', name='monthNum')

我正在尝试在数据框中实现以下目标 Final_Combined_DF:

monthNum        1      2 
G1                                
2.0           0.05  -0.16
3.0           1.17   0.07
4.0           9.06   0.83
G2                                
21.0           0.25   0.26
31.0           1.27   0.27
41.0           9.26   0.23

我尝试了不同的组合:
pd.concat(dfList, axis=0)

但它没有给我想要的输出。我不知道该怎么做。

我们可以尝试 pd.concat with keys using the Index.name 从每个 DataFrame 中在最终帧中添加一个新的级别索引:

final_combined_df = pd.concat(
    df_list, keys=map(lambda d: d.index.name, df_list)
)

final_combined_df:

monthNum  0  1
G1 2.0    4  7
   3.0    7  1
   4.0    9  5
G2 21.0   8  1
   31.0   1  8
   41.0   2  6

使用的设置:

import numpy as np
import pandas as pd

np.random.seed(5)
df_list = [
    pd.DataFrame(np.random.randint(1, 10, (3, 2)),
                 columns=pd.Index([0, 1], name='monthNum'),
                 index=pd.Index([2.0, 3.0, 4.0], name='G1')),
    pd.DataFrame(np.random.randint(1, 10, (3, 2)),
                 columns=pd.Index([0, 1], name='monthNum'),
                 index=pd.Index([21.0, 31.0, 41.0], name='G2'))
]

df_list:

[monthNum  0  1
G1            
2.0       4  7
3.0       7  1
4.0       9  5, 
 monthNum  0  1
G2            
21.0      8  1
31.0      1  8
41.0      2  6]