我有两个数据框,
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行,但是如果我在Component上执行drop_duplicates,我将丢失信息,那么我如何只保留三行而不丢失信息关于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
有人知道怎么做吗?
答案 0 :(得分:1)
您可以创建一个具有每个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