Git: Почему необходима слияние базы [duplicate]

Вариант 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
104
задан Martin Geisler 26 February 2012 в 11:42
поделиться

4 ответа

Скажите, что вы и ваш друг проверили файл и внесли некоторые изменения в него. Вы удалили строку в начале, и ваш друг добавил строку в конце. Затем он передал свой файл, и вам нужно объединить его изменения в свою копию.

Если вы делали двусторонний слияние (другими словами, diff), инструмент мог сравнивать два файла, и посмотрите, что первая и последняя строки разные. Но как он узнает, что делать с различиями? Если объединенная версия включает первую строку? Должен ли он включать последнюю строку?

С трехсторонним слиянием он может сравнивать два файла, но он также может сравнивать каждый из них с исходной копией (до того, как вы ее изменили). Таким образом, он может видеть, что вы удалили первую строку и что ваш друг добавил последнюю строку. И он может использовать эту информацию для создания объединенной версии.

171
ответ дан JW. 28 August 2018 в 23:00
поделиться

Я написал очень подробный пост об этом . В принципе вы не можете отслеживать удаление / добавление с двухсторонним, очень, очень непродуктивным.

15
ответ дан pablo 28 August 2018 в 23:00
поделиться

Трехстороннее слияние, когда два набора изменений в один базовый файл объединяются по мере их применения, в отличие от применения одного, а затем слияние результата с другим.

Например, с двумя изменениями, когда строка добавляется в том же месте, может быть интерпретирована как два дополнения, а не изменение одной строки.

Например,

файл 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
12
ответ дан Shiyang Wang 28 August 2018 в 23:00
поделиться

Этот слайд из представления о перфорации интересен:

alt text [/g1]

Существенная логика трехмерного отображения, способ простого слияния:

  • Сравнить базовые, исходные и целевые файлы
  • Определить «куски» в файле исходных файлов и целевых файлов: куски, которые не совпадают базовые куски, которые соответствуют базе
  • . Затем объединяем объединенный результат, состоящий из: кусков, которые соответствуют друг другу во всех трех файлах. Куски, которые не соответствуют базе ни в источнике, ни в цель, но не в обоих кусках, которые не совпадают с базой, но которые соответствуют друг другу (т. е. они были изменены одинаково как в исходном, так и в целевом). Заполнители для кусков, которые конфликтуют, которые должны быть разрешены пользователем.

Обратите внимание, что «куски» на этой иллюстрации являются чисто символическими. Каждый из них может представлять строки в файле или узлы в иерархии или даже файлы в каталоге. Все зависит от того, на что способен конкретный инструмент слияния.

Возможно, вы спрашиваете, какое преимущество предлагает трехстороннее слияние при слиянии с двумя путями. На самом деле, нет такой вещи, как двухстороннее слияние, только инструменты, которые различают два файла и позволяют вам «сливаться», выбирая куски из одного файла или другого. Только трехстороннее слияние дает вам возможность узнать, является ли фрагмент изменением от источника и не изменяется ли конфликт.

49
ответ дан VonC 28 August 2018 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: