将多索引数据框与单索引数据框连接起来会破坏多索引格式

时间:2020-10-14 01:44:44

标签: python pandas dataframe

使用熊猫1.1.3

我有一个多索引数据框(不确定这是否是正确的术语),如下所示。

df1:

            A          B
       mean   max   mean max
name   

John    3      4     5    6
Cindy   1      6     7    8
Chris   3      5     5    5

df1.columns输出MultiIndex([('A','mean'),('A','max'),('B','mean'),('B','max')] )。

  1. 我用正确的术语称呼它吗?它应该被称为多级列吗?

我的df2如下所示: df2:

 name      title
John     Data Engineer
Cindy    Data Analyst
Chris    Data Scientist

从df1到df2的左连接成功运行,但是破坏了多索引格式。

pd.merge(df1, df2, how="left", left_index=True, right_on="name")

输出

       (A, mean)    (A, max)    (B, mean)     (B, max)     title
name   
John       3           4            5            6         Data Engineer
Cindy      1           6            7            8         Data Analyst
Chris      3           5            5            5         Data Scientist

我想在保持多索引格式的同时执行连接,所需的数据框应如下所示:

                  A                       B                  title
          mean         max          mean       max
 name   
John       3           4            5            6         Data Engineer
Cindy      1           6            7            8         Data Analyst
Chris      3           5            5            5         Data Scientist

谢谢!

1 个答案:

答案 0 :(得分:1)

我用正确的术语称呼它吗?它应该被称为 多级列?

是的,它是MultiIndex。您所要做的只是索引的字符串表示形式。在更高版本的Pandas上,df.columns会给您:

MultiIndex([('A', 'mean'),
            ('A',  'max'),
            ('B', 'mean'),
            ('B',  'max')],
           )

这里的问题是如何查看期望的输出,特别是最后一列?还是MultiIndex吗?如果是这样,第二级值是多少?

也就是说,您可以将预期的输出与:

df.join(df2.set_index('name').rename(columns=lambda x: (x,"")))

输出:

         A        B               title
      mean max mean max                
name                                   
John     3   4    5   6   Data Engineer
Cindy    1   6    7   8    Data Analyst
Chris    3   5    5   5  Data Scientist