Как мне объединить или объединить 2 фрейма данных, где я получаю новый столбец для каждой строки, где ключ left_on / right_on одинаков?

#pandas #dataframe #pandas-groupby

#pandas #фрейм данных #pandas-groupby

Вопрос:

Дано 2 фрейма данных: DF1

ID Имя
123 Джим
456 Боб

DF2

record_id model_year make_desc model_desc vin
123 2008 Chevy Тахо cvin
456 2020 Hyundai Elantra hvin
456 2018 Ford F-150 fvin

Я хочу объединить / объединить / groupby, не уверен, что результат действительно такой:

ID Имя model_year1 make_desc1 model_desc1 vin1
123 Джим 2008 Chevy Тахо cvin
456 Боб 2020 Hyundai Elantra hvin
model_year2 make_desc2 model_desc2 vin2
2008 Chevy Тахо cvin
2018 Ford F150 fvin

(вторая таблица результатов — это просто больше столбцов из первой таблицы, я не смог разобраться с разметкой)

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

Я попробовал горизонтальное объединение, но, похоже, оно не совпадает по значению. Я также прочитал кучу на groupby, но я не могу его получить.

любая помощь будет оценена.

Ответ №1:

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

 df3=pd.merge(df1,df2, how='left', on='ID')#Merge the two dfs
df3=df3.groupby(['ID','Name'])['JobCode'].unique().reset_index()# JobCode to list
df3[['JobCode','JobCode_x']]=pd.DataFrame(df3['JobCode'].tolist(), index= df3.index)#Create required columns




ID    Name JobCode JobCode_x
0  123  Jim     H1B      None
1  456  Bob     H1B       H2B
 

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

1. это близко, но df3[[‘JobCode’,’JobCode_x’]]=pd.DataFrame(df3[‘JobCode’].tolist(), index= df3.index) требует, чтобы номер столбца совпадал с ключом (в данном случае списком)

2. Нет, совсем нет. Из примера вы заметили, что это было возможно. Отличается ли предоставленный образец от реальной ситуации?

3. да, позвольте мне отредактировать мой вопрос, чтобы он больше соответствовал тому, что я пытаюсь сделать. некоторые данные юридически обременены, поэтому я их изменю.

4. newdf = pd.merge(cdf,cldf, how='left', left_on='id', right_on='Dealer_ID')#Merge the two dfs newdf=newdf.groupby(['record_id','model_year'])['vin'].unique().reset_index()# JobCode to list newdf[['vin', 'vin_x']]=pd.DataFrame(newdf['vin'].tolist(), index= newdf.index)#Create required columns Ошибка значения: столбцы должны иметь ту же длину, что и ключ

5. поймите, если у меня есть 5 уникальных vin под одним идентификатором, мне могут понадобиться созданные столбцы vin1, vin2, vin3, vin4, vin5, а в следующем нет совпадений, тогда в следующем 3.