合并两个数据框后如何删除重复项?
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
我有两个数据框,
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