合并两个数据框后如何删除重复项?

how to drop duplicates after merging two dataframes?

我有两个数据框,

A= 
ID compponent weight
12  Cap        0.4
12  Pump       183
12  label      0.05
14  cap        0.6 

B=
ID compponent_B weight_B
12  Cap_B       0.7
12  Pump_B       189
12  label      0.05


当我根据 ID 作为键合并这两个数据帧时,我得到


ID component weight component_B  weight_B
12  Cap        0.4   Cap_B        0,7
12  Cap        0.4   Pump_B       189
12  Cap        0.4   label        0.05
12  Pump       183   Cap_B        0,7
12  Pump       183   Pump_B       189
14  Pump       183   label        0.05
...

我知道如果我进行合并,我有一个 ID 倒 3 行会生成 9 行,但是如果我在 drop_duplicates组件 i 将丢失有关 component_B 的信息。我想要类似的东西:


ID component weight  component_B  weight_B
12  Cap        0.4    Cap_B        0,7
12  Pump       183    Pump_B       189
12  labeL      0,05   label        0.05


有人知道怎么做吗?

您可以创建一个每个 ID 具有 cumcount 的列,以便能够 merge ID 和这个新列,例如:

dfm = dfA.assign(cc=dfA.groupby('ID').cumcount())\
         .merge(dfB.assign(cc=dfB.groupby('ID').cumcount()), 
                on=['ID', 'cc'], how='outer')
print (dfm)
   ID compponent  weight  cc compponent_B  weight_B
0  12        Cap    0.40   0        Cap_B      0.70
1  12       Pump  183.00   1       Pump_B    189.00
2  12      label    0.05   2        label      0.05
3  14        cap    0.60   0          NaN       NaN