我有两种类型的数据框,即多索引的:
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的唯一值,因此可以添加额外的列。但是如何以这种方式合并呢?
答案 0 :(得分:0)
您可以结合使用unstack
和pivot
:
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