#python #pandas #merge #key
Вопрос:
Мне нужно объединить два фрейма данных. Чтобы убедиться, что строки уникальны, мне нужно убедиться, что «Имя» и «Возраст» совпадают перед объединением. Я использую комбинацию в качестве первичного ключа. Вот мой код:
df = pd.merge(df, df1[['Name', 'Age', 'Date']], left_on=['Name', 'Age'], right_on=['Name', 'Age'], how='left')
Когда я использую несколько ключей («Имя» и «Возраст»), это совпадение «И» или «ИЛИ». Я хочу, чтобы он сливался только в том случае, если совпадают «Имя» и «Возраст», а не только в том случае, если совпадают только «Имя» или «Возраст». Кажется, я не могу найти это в документации, и я получаю некоторые смешанные результаты.
Обновление: Мне действительно нужно выполнить левое соединение по соображениям данных. ПРАВАЯ таблица-это подмножество данных, которые мне нужны, в то время как мне нужно сохранить все данные СЛЕВА. Ключевая концепция состоит в том, чтобы объединить только те данные, которые соответствуют как «Имени», так и «Возрасту».
Комментарии:
1. Удалите, как= «слева», и вы получите внутреннее соединение только тогда, когда имя и возраст совпадут.
2. Вам нужно
inner
присоединиться.left
Соединение сохраняет все ключи левого фрейма данных и только соответствующие ключи правого фрейма данных3. Спасибо вам за ваши комментарии. Мне действительно нужно сделать ЛЕВОЕ соединение по соображениям данных. Правая таблица-это подмножество данных, которые мне нужны, в то время как мне нужно сохранить все данные СЛЕВА. Ключ состоит в том, чтобы объединить справа только те данные, которые соответствуют как «Имени», так и «Возрасту».
Ответ №1:
Я провел кое-какие тесты по этому поводу. Ответ заключается в том, что объединение Панд на нескольких клавишах-это функция «И», а не «ИЛИ».
Вот тест, который я провел:
DF1 =:
A B D
----------
a m 1
b n 2
c o 3
d q 4
e r 5
f s 6
g t 7
h u 8
i v 9
DF2 =:
Q R S
-----------
a m abc
x n def
c x hij
d q klm
x r nop
f x qrs
g t tuv
x u wxy
i x zab
(Заменив буквы на «x», чтобы они не совпадали.)
Запуск этого слияния:
df_merged = pd.merge(df1, df2[['Q', 'R', 'S']], left_on=['A', 'B'], right_on=['Q', 'R'], how='left')
Возвращает этот вывод:
A B D Q R S
--------------------------
a m 1 a m abc
b n 2 NaN NaN NaN
c o 3 NaN NaN NaN
d q 4 d q klm
e r 5 NaN NaN NaN
f s 6 NaN NaN NaN
g t 7 g t tuv
h u 8 NaN NaN NaN
i v 9 NaN NaN NaN
Информация включается только справа, когда совпадают ОБА ключа. В частности, когда A==Q И B==R.
Надеюсь, это может помочь другим.