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'}