Python 3.x 连接多索引数据帧和单索引数据帧

Python 3.x 连接多索引数据帧和单索引数据帧,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有两种类型的数据帧,即多索引数据帧: Code_1 pk1 pk2 Code_2 X Y Z X Z Col_1 120 10 1 1 2 Col_2 15 2 3 5 6 和单索引数据帧,看起来像 Code1 col_3 col_4 col_5 pk1 xyz xyz xyz pk2 xyz xyz xyz pk3 xyz xyz

我有两种类型的数据帧,即多索引数据帧:

Code_1  pk1           pk2
Code_2  X     Y   Z   X   Z
Col_1   120  10   1   1   2
Col_2   15    2   3   5   6
和单索引数据帧,看起来像

Code1  col_3   col_4   col_5
pk1    xyz     xyz     xyz
pk2    xyz     xyz     xyz
pk3    xyz     xyz     xyz
Code1  col_3   col_4   col_5  X_Col_1  X_Col_2  Y_Col_1  Y_Col_2  Z_Col_1  Z_Col_2
pk1    xyz     xyz     xyz    120       15        10        2        0        0
pk2    xyz     xyz     xyz     1         3        0         0        2        6    
pk3    xyz     xyz     xyz     0         0        0         0        0        0
我想以这样一种方式将其合并到数据帧中

Code1  col_3   col_4   col_5
pk1    xyz     xyz     xyz
pk2    xyz     xyz     xyz
pk3    xyz     xyz     xyz
Code1  col_3   col_4   col_5  X_Col_1  X_Col_2  Y_Col_1  Y_Col_2  Z_Col_1  Z_Col_2
pk1    xyz     xyz     xyz    120       15        10        2        0        0
pk2    xyz     xyz     xyz     1         3        0         0        2        6    
pk3    xyz     xyz     xyz     0         0        0         0        0        0

如何以最有效的方式完成?另外,我有唯一的Code_2值,所以我可以创建额外的列。但是如何以这种方式合并它呢?

您可以通过组合使用
取消堆栈
透视

df1 = df1.unstack().reset_index().rename({"level_0": "Code1"}, axis=1)
df1["new_col"] = df1.level_1 + df1.level_2
df1.pivot(index="Code1", columns="new_col", values=0).reset_index().merge(
    df2, on="Code1", how="outer"
).fillna(0).reindex(
    columns=[
        "Code1",
        "col_3",
        "col_4",
        "col_5",
        "XCol_1",
        "XCol_2",
        "YCol_1",
        "YCol_2",
        "ZCol_1",
        "ZCol_2",
    ]
)
它会给你

    Code1   col_3   col_4   col_5   XCol_1  XCol_2  YCol_1  YCol_2  ZCol_1  ZCol_2
0   pk1     xyz     xyz     xyz     120.0   15.0    10.0    2.0     2.0     6.0
1   pk2     xyz     xyz     xyz     1.0     5.0     0.0     0.0     0.0     0.0
2   pk3     xyz     xyz     xyz     0.0     0.0     0.0     0.0     0.0     0.0

您能否将两个数据帧的
df.to_dict()?使在存在的情况下复制和粘贴变得更容易multiindices@ignoring_gravity第一句话:{Col_1':120,'Col_2':15},('pk1','Y'):{'Col_1':10,'Col_2':2},('pk1','Z'):{'Col_1':1,'Col_2':3},('pk2','X'):{'Col_1':1',Col_2':5},('pk1','Z'):{'Col_1':2,'Col_2':6}
第二段:{'Code1':{0:pk1,1:pk2,2:pk3},'Col_3':{0:xyz',1:xyz',2:xyz},'colu 4':{0:xyz 1:xyz 2:xyz,'Col 5':{0:xyz 1:xyz 1:xyz 2'}