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