Настройка
У меня есть 2 панды dfs (df1 и df2), которые содержат несколько перекрывающихся строк и несколько непересекающихся строк.
Оба dfs имеют столбцы order_id
и shop
.
Теперь, если строка df1 совпадает со строкой df2 в комбинации order_id
и shop
, тогда ничего,Но если строка df1 не совпадает со строкой df2 в комбинации order_id
и shop
, то эту строку df1 следует добавить к df2.
Пример
df2
таков, что
order_id shop
0 12345 'NL'
1 45678 'FR'
2 12345 'DE'
3 34567 'NL'
Теперь, если df1
такой, что
order_id shop
0 12345 'NL'
1 45678 'FR'
, тогда ничего.
Но если df1
так, что
order_id shop
0 12345 'NL'
1 99999 'FR'
2 12345 'UK'
, то строки 1 и 2 должны быть добавлены к df2
, хотя shop
значения для строки 1 и order_id
для строки 2 уже находятся в df2
.
Получившийся df2
должен выглядеть следующим образом:
order_id shop
0 99999 'FR'
1 12345 'UK'
2 12345 'NL'
3 45678 'FR'
4 12345 'DE'
5 34567 'NL'
Обратите внимание, что столбец order_id
имеет тип int, а столбец shop
- строка.
Итак, в графическом плане то, что я хочу достичь, выглядит следующим образом:

Код
Я создал чудовищную линию, которая тогда действительно не работала ...
Пока что у меня есть
result_df = df1[(~df1['order_id'].astype(str).isin(df2['order_id'].astype(str)))]
Как мне решить эту проблему?
ДОПОЛНИТЕЛЬНО
, если df1
такое, что
order_id shop
0 12345 'NL'
1 99999 'FR'
2 12345 'UK'
, как мне сравнить df1
с df2
таким, что я получаю df3
который выглядит как
order_id shop
0 99999 'FR'
1 12345 'UK'