如何合并具有不同列索引级别的两个Pandas数据帧?

2024-06-02 06:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想连接两个索引相同但列级别不同的数据帧。一个数据帧有层次索引,另一个没有。在

print df1

              A_1               A_2               A_3                .....
              Value_V  Value_y  Value_V  Value_y  Value_V  Value_y

instance200   50       0        6500     1        50       0
instance201   100      0        6400     1        50       0

另一个:

^{pr2}$

结果如下:

             PV        Estimate   A_1               A_2               A_3                .....
                                  Value_V  Value_y  Value_V  Value_y  Value_V  Value_y

instance200  2002313   1231233    50       0        6500     1        50       0
instance201  2134124   1124724    100      0        6400     1        50       0

但是在帧上进行合并或连接会给我一个一维列索引的df:

             PV        Estimate   (A_1,Value_V) (A_1,Value_y) (A_2,Value_V) (A_2,Value_y)  .....


instance200  2002313   1231233    50             0             6500         1
instance201  2134124   1124724    100            0             6400         1 

如何使层次索引不受df1的影响?在


Tags: 数据dfvalue级别df1printpvestimate
2条回答

您可以通过使df2具有与df1相同数量的级别来实现此目的:

In [11]: df1
Out[11]:
                A_1             A_2             A_3
            Value_V Value_y Value_V Value_y Value_V Value_y
instance200      50       0    6500       1      50       0
instance201     100       0    6400       1      50       0

In [12]: df2
Out[12]:
                  PV  Estimate
instance200  2002313   1231233
instance201  2134124   1124724

In [13]: df2.columns = pd.MultiIndex.from_arrays([df2.columns, [None] * len(df2.columns)])

In [14]: df2
Out[14]:
                  PV Estimate
                 NaN      NaN
instance200  2002313  1231233
instance201  2134124  1124724

现在,您可以在不损坏列名的情况下执行concat:

^{pr2}$

注意:要让df2列首先使用pd.concat([df2, df1], axis=1)。在


也就是说,我不确定我是否能想出一个这样的用例,将它们作为单独的数据帧保存实际上可能是一个更简单的解决方案。。。!

也许使用好的ole赋值:

df3 = df1.copy()
df3[df2.columns] = df2

收益率

^{pr2}$

相关问题 更多 >