Фрейм данных Pandas объединяется с несколькими ключами («И» или «ИЛИ»?)

#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.

Надеюсь, это может помочь другим.