У меня есть два кадра данных, выглядящих как
df1:
ID A B C D
0 'ID1' 0.5 2.1 3.5 6.6
1 'ID2' 1.2 5.5 4.3 2.2
2 'ID1' 0.7 1.2 5.6 6.0
3 'ID3' 1.1 7.2 10. 3.2
df2:
ID A B C D
0 'ID1' 1.0 2.0 3.3 4.4
1 'ID2' 1.5 5.0 4.0 2.2
2 'ID3' 0.6 1.2 5.9 6.2
3 'ID4' 1.1 7.2 8.5 3.0
df1 может иметь несколько записей с одинаковым ID
, тогда как каждый ID
встречается только один раз в df2. Также не все ID
в df2 обязательно присутствуют в df1. Я не могу решить эту проблему с помощью set_index()
, так как несколько строк в df1 могут иметь одинаковый ID
, и что ID
в df1 и df2 не выровнены.
Я хочу создать новый фрейм данных, в котором я вычитаю значения в df2[['A','B','C','D']]
из df1[['A','B','C','D']]
на основе сопоставления идентификатора.
Полученный кадр данных будет выглядеть так:
df_new:
ID A B C D
0 'ID1' -0.5 0.1 0.2 2.2
1 'ID2' -0.3 0.5 0.3 0.0
2 'ID1' -0.3 -0.8 2.3 1.6
3 'ID3' 0.5 6.0 1.5 0.2
Я знаю, как сделать это с помощью цикла, но, поскольку я имею дело с огромными объемами данных, это вообще не практично. Как лучше всего подойти к этому с помощью панд?