联接多索引数据帧和单索引数据帧



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

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

如何以最有效的方式做到这一点?附言我有 Code_2 的唯一值,所以我可以制作额外的列。但是如何以这种方式合并它呢?

你可以用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

最新更新