Вариант 1
Используйте df.merge
out = df1.merge(df2, left_on='store', right_on='store_code')\
[['id', 'store', 'address', 'warehouse']]
print(out)
id store address warehouse
0 1 100 xyz Land
1 2 200 qwe Sea
2 3 300 asd Land
3 4 400 zxc Land
4 5 500 bnm Sea
Вариант 2
Используя pd.concat
и df.sort_values
out = pd.concat([df1.sort_values('store'),\
df2.sort_values('store_code')[['warehouse']].reset_index(drop=1)], 1)
print(out)
id store address warehouse
0 1 100 xyz Land
1 2 200 qwe Sea
2 3 300 asd Land
3 4 400 zxc Land
4 5 500 bnm Sea
Первый вызов сортировки избыточен, если ваш фреймворк уже отсортирован на store
, и в этом случае вы можете его удалить.
Вариант 3
Использование df.replace
s = df1.store.replace(df2.set_index('store_code')['warehouse'])
print(s)
0 Land
1 Sea
2 Land
3 Land
4 Sea
df1['warehouse'] = s
print(df1)
id store address warehouse
0 1 100 xyz Land
1 2 200 qwe Sea
2 3 300 asd Land
3 4 400 zxc Land
4 5 500 bnm Sea
Альтернативно, создайте отображение явно. Это работает, если вы хотите использовать его позже.
mapping = dict(df2[['store_code', 'warehouse']].values) # separate step
df1['warehouse'] = df1.store.replace(mapping) # df1.store.map(mapping)
print(df1)
id store address warehouse
0 1 100 xyz Land
1 2 200 qwe Sea
2 3 300 asd Land
3 4 400 zxc Land
4 5 500 bnm Sea
Скажите, что вы и ваш друг проверили файл и внесли некоторые изменения в него. Вы удалили строку в начале, и ваш друг добавил строку в конце. Затем он передал свой файл, и вам нужно объединить его изменения в свою копию.
Если вы делали двусторонний слияние (другими словами, diff), инструмент мог сравнивать два файла, и посмотрите, что первая и последняя строки разные. Но как он узнает, что делать с различиями? Если объединенная версия включает первую строку? Должен ли он включать последнюю строку?
С трехсторонним слиянием он может сравнивать два файла, но он также может сравнивать каждый из них с исходной копией (до того, как вы ее изменили). Таким образом, он может видеть, что вы удалили первую строку и что ваш друг добавил последнюю строку. И он может использовать эту информацию для создания объединенной версии.
Я написал очень подробный пост об этом . В принципе вы не можете отслеживать удаление / добавление с двухсторонним, очень, очень непродуктивным.
Трехстороннее слияние, когда два набора изменений в один базовый файл объединяются по мере их применения, в отличие от применения одного, а затем слияние результата с другим.
Например, с двумя изменениями, когда строка добавляется в том же месте, может быть интерпретирована как два дополнения, а не изменение одной строки.
Например,
файл a был изменен двумя людьми, одним добавлением лося, добавив мышь.
#File a
dog
cat
#diff b, a
dog
+++ mouse
cat
#diff c, a
dog
+++ moose
cat
Теперь, если мы объединим набор изменений по мере их применения, мы получим (трехстороннее слияние)
#diff b and c, a
dog
+++ mouse
+++ moose
cat
. Но если применить b , тогда посмотрите на изменение от b до c, это будет выглядеть так, будто мы просто меняем 'u' на 'o' (с 2-сторонним слиянием)
#diff b, c
dog
--- mouse
+++ moose
cat
Этот слайд из представления о перфорации интересен:
[/g1]
Существенная логика трехмерного отображения, способ простого слияния:
- Сравнить базовые, исходные и целевые файлы
- Определить «куски» в файле исходных файлов и целевых файлов: куски, которые не совпадают базовые куски, которые соответствуют базе
- . Затем объединяем объединенный результат, состоящий из: кусков, которые соответствуют друг другу во всех трех файлах. Куски, которые не соответствуют базе ни в источнике, ни в цель, но не в обоих кусках, которые не совпадают с базой, но которые соответствуют друг другу (т. е. они были изменены одинаково как в исходном, так и в целевом). Заполнители для кусков, которые конфликтуют, которые должны быть разрешены пользователем.
Обратите внимание, что «куски» на этой иллюстрации являются чисто символическими. Каждый из них может представлять строки в файле или узлы в иерархии или даже файлы в каталоге. Все зависит от того, на что способен конкретный инструмент слияния.
Возможно, вы спрашиваете, какое преимущество предлагает трехстороннее слияние при слиянии с двумя путями. На самом деле, нет такой вещи, как двухстороннее слияние, только инструменты, которые различают два файла и позволяют вам «сливаться», выбирая куски из одного файла или другого. Только трехстороннее слияние дает вам возможность узнать, является ли фрагмент изменением от источника и не изменяется ли конфликт.
blockquote>