使用熊猫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')] )。
我的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
谢谢!
答案 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