使用 pd.concat 时的 MultiIndex 名称消失了

问题描述 投票:0回答:1

考虑以下数据框

df1
df2

df1: 
sim_names       Model 1          
signal_names     my_y1     my_y2
units               °C       kPa
(Time, s)                       
0.0           0.738280  1.478617
0.1           1.078653  0.486527
0.2           0.794123  0.604792
0.3           0.392690  1.072772 

df2: 
 Empty DataFrame
Columns: []
Index: [0.0, 0.1, 0.2, 0.3] 

如您所见,

df1
具有三个级别,名称为
"sim_names", "signal_names" and "units"
.

接下来,我想连接两个数据帧,因此我运行以下命令:

    df2 = pd.concat(
        [df1, df2],
        axis="columns",
    )

但我得到的是以下内容:

 df2:
             Model 1          
              my_y1     my_y2
                 °C       kPa
(Time, s)                    
0.0        0.738280  1.478617
0.1        1.078653  0.486527
0.2        0.794123  0.604792
0.3        0.392690  1.072772 

如您所见,关卡名称不见了。

我应该怎么做才能在生成的

df1
中保留
df2
的级别名称?

我想要的结果

df2
应该像下面这样:

df2: 
sim_names       Model 1          
signal_names     my_y1     my_y2
units               °C       kPa
(Time, s)                       
0.0           0.738280  1.478617
0.1           1.078653  0.486527
0.2           0.794123  0.604792
0.3           0.392690  1.072772 

我试图将

names=["sim_names", "signal_names", "units"]
作为参数传递给
pd.concat
但我得到了与上面相同的错误结果。

python pandas dataframe
1个回答
0
投票

我不确定,但似乎这是正常行为(参见 GH13475)。

作为解决方法,您可以使用

rename_axis
/
names

out = pd.concat(
        [df1, df2],
        axis="columns",
    ).rename_axis(df1.columns.names, axis=1) # <- added chain

输出:

print(out)

sim_names    Model 1      
signal_names   my_y1 my_y2
units             °C   kPa
(Time, s)                 
0.00            0.74  1.48
0.10            1.08  0.49
0.20            0.79  0.60
0.30            0.39  1.07
© www.soinside.com 2019 - 2024. All rights reserved.