Могу ли я объединить значения двух строк с немного разными метками в pandas

#python #pandas

#python #pandas

Вопрос:

У меня есть 2 фрейма данных, которые я хочу объединить. Однако названия строк немного отличаются друг от друга. Возможно ли объединить их с помощью pandas?

 **df1**
Date        Campaign     Units sold  Sales 
11/07/2020  AMZ ABCDEFG  1           $10
12/07/2020  AMZ ABCDEFG  2           $20
13/07/2020  AMZ ABCDEFG  3           $30

**df2**
Date        Campaign     Clicks    Spend
11/07/2020  GA ABCDEFG   10        $5
12/07/2020  GA ABCDEFG   15        $6
13/07/2020  GA ABCDEFG   20        $7

**Desired output**
Date       Campaign  Clicks  Units sold   Spend   Sales
11/07/2020 ABCDEFG   10      1            $5      $10
12/07/2020 ABCDEFG   15      2            $6      $20
13/07/2020 ABCDEFG   20      3            $7      $30   
  

Ответ №1:

Возможно, вам захочется немного почистить выходные данные, но это похоже на то, что вам нужно.

 df1["Campaign_id"] = df1["Campaign"].str.split(expand=True)[1]
df2["Campaign_id"] = df2["Campaign"].str.split(expand=True)[1]
df = df1.merge(df2, on=["Campaign_id", "Date"], how="outer")
print(df)

         Date   Campaign_x  Units sold Sales Campaign_id  Campaign_y  Clicks  
0  11/07/2020  AMZ ABCDEFG           1   $10     ABCDEFG  GA ABCDEFG      10   
1  12/07/2020  AMZ ABCDEFG           2   $20     ABCDEFG  GA ABCDEFG      15   
2  13/07/2020  AMZ ABCDEFG           3   $30     ABCDEFG  GA ABCDEFG      20   

  Spend  
0    $5  
1    $6  
2    $7 
  

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

1. Я использовал это и получил сообщение об ошибке «Ошибка значения: неверное количество переданных элементов 13, размещение подразумевает 1». Можете ли вы помочь мне понять проблему и также помочь мне ее решить? Спасибо

Ответ №2:

Чтобы получить ожидаемый результат :

df3 = df1.merge(df2[['Date','Clicks','Spend']],on = 'Date')

Затем стандартизируйте Campaign :

df3["Campaign"].str.split(expand=True)[1]