Объединение фреймов данных по общему ключу без широковещательных строк

#python #pandas #dataframe #join #merge

#python #pandas #фрейм данных #Присоединиться #слияние

Вопрос:

У меня есть два фрейма данных df1 и df2, каждый из которых имеет следующую структуру: идентификатор и другие переменные

 df1
id  var1   var2
100  1      blue
100  2      orange
101  3      red
102  1      apple

df2
id  var3   var4
99   2      purple
100  3      pineaple
100  4      banana
100  15     pumpkin
70   1      juice
 

Некоторые ключи являются общими для обоих фреймов данных. Мне нужно объединить их, чтобы получить что-то вроде этого:

 
id  var1   var2     var3     var4
99   none   none     2      purple
100  1      blue     3      pineaple
100  2      orange   4      banana
100  none   none     15     pumpkin
101  3      red      none   none
102  1      apple    none   none
70   none   none     1      juice
 

Это для объединения информации по общим индексам. Я пробовал объединения и слияния, но я всегда получаю «широковещательную» версию таблицы. Учитывая общие индексы в обеих таблицах, pandas повторяет каждую строку первого фрейма данных для каждой строки второго. Это выглядит так:

 id  var1   var2     var3     var4
99   none   none     2      purple
100  1      blue     3      pineaple
100  1      blue     4      banana
100  1      blue     15     pumpkin
100  2      orange   3      pineaple
100  2      orange   4      banana
100  2      orange   15     pumpkin
101  3      red      none   none
102  1      apple    none   none
70   none   none     1      juice
 

Что я могу попробовать, чтобы получить то, что мне нужно?
Заранее спасибо

Еще немного информации
У меня есть две команды, работающие над планами технического обслуживания промышленного предприятия. Каждый из них дал мне заказ на поставку, содержащий детали, которые должен купить завод. Я хочу сравнить их планы, чтобы найти различия в их заказах на поставку с учетом общих планов. Кроме того, кто-то может работать над планом, которого нет у другой команды.

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

1. Возможно pd.concat ?

2. pd.concat((df1, df2), ось = 1)

3. В вашем примере, как вы узнаете, какая строка с id = 100 в df2 совпадает с id = 100 в df1? Если это просто порядок (1, синие строки вверх с 3, ананас, потому что они являются первой строкой id = 100 в каждом df), то вы можете добавить столбец в каждый df, в котором указано, какой экземпляр идентификатора для текущей строки является идентификатором, тогда вы можете использовать оба столбцав вашем соединении

4. Я предполагаю, что var1 и var3 — это единицы измерения для того, что находится в var2 и var4, и в этом случае вы хотели бы сначала суммировать каждую таблицу по отдельности, чтобы у вас была взаимно однозначная связь между строками. Затем вы можете объединить наборы данных вместе.