левое соединение с использованием панд заполняет данные дважды для одной и той же строки

#python #python-3.x #pandas

Вопрос:

Я пытаюсь использовать pandas для анализа данных, используемых merge для выполнения vlookup, два набора данных, как показано ниже,

 data1 = acc_name tier content group gcode acc_ID abc 3 55 b 111 R-DDD def 4 45 c 222 X-TTT xyz 4 60 a 333 S-UUU abc 4 4 b 112 R-DDD xyz 4 6 a 331 X-TTT def 4 10 c 221 S-UUU  
 data2= Accountn type status xyz internal Active  def external Active abc internal Inactive  

код, который я использовал, таков

 data1 = pd.read_csv('data1.csv') data2 = pd.read_csv('data2.csv') data1.rename(columns={'acc_name':'Accountn'},inplace = True) final = pd.merge(data1,data2[['Accountn','status']],on=['Accountn'],how='left')  

Результат, который я получаю, таков:

 final = Accountn tier content group gcode acc_ID status abc 3 55 b 111 R-DDD Inactive abc 3 55 b 111 R-DDD Inactive abc 3 55 b 111 R-DDD Inactive def 4 45 c 222 X-TTT Active def 4 45 c 222 X-TTT Active def 4 45 c 222 X-TTT Active xyz 4 60 a 333 S-UUU Active xyz 4 60 a 333 S-UUU Active xyz 4 60 a 333 S-UUU Active abc 4 4 b 112 R-DDD Inactive abc 4 4 b 112 R-DDD Inactive abc 4 4 b 112 R-DDD Inactive xyz 4 6 a 331 X-TTT Active xyz 4 6 a 331 X-TTT Active xyz 4 6 a 331 X-TTT Active def 4 10 c 221 S-UUU Active def 4 10 c 221 S-UUU Active def 4 10 c 221 S-UUU Active  

O/P, который я хочу, это,

 Accountn tier content group gcode acc_ID status abc 3 55 b 111 R-DDD Inactive def 4 45 c 222 X-TTT Active xyz 4 60 a 333 S-UUU Active abc 4 4 b 112 R-DDD Inactive xyz 4 6 a 331 X-TTT Active def 4 10 c 221 S-UUU Active  

Я не знаю, что не так в моем коде

Комментарии:

1. Когда я запускаю ваш код, я получаю ожидаемый результат — никаких дубликатов.

Ответ №1:

Удалите дубликаты в df2 столбце по для объединения здесь Accountn , чтобы в выводе не было дубликатов:

 final = pd.merge(data1,data2[['Accountn','status']].drop_duplicates('Accountn'),  on=['Accountn'],  how='left')  

Комментарии:

1. Спасибо, это работает, но почему так происходит, что создаются дубликаты записей?

2. @Kimberly_Jennifer — потому что тогда создается cross join , потому что объединенные дублированные значения в обоих кадрах данных в Accountn