连接多索引数据框和单索引数据框

时间:2020-01-08 10:03:39

标签: 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     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

如何以最有效的方式做到这一点? P.S我有Code_2的唯一值,因此可以添加额外的列。但是如何以这种方式合并呢?

1 个答案:

答案 0 :(得分:0)

您可以结合使用unstackpivot

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