Объединение двух панелей данных на основе нескольких условий - PullRequest
0 голосов
/ 30 ноября 2018

df_a и df_b - это два кадра данных, которые выглядят следующим образом

df_a
A   B       C      D     E
x1  Apple   0.3   0.9    0.6
x1  Orange  0.1   0.5    0.2
x2  Apple   0.2   0.2    0.1
x2  Orange  0.3   0.4    0.9
x2  Mango   0.1   0.2    0.3
x3  Orange  0.3   0.1    0.2


df_b
A   B_new   F    
x1  Apple   0.3  
x1  Mango   0.2  
x1  Orange  0.1   
x2  Apple   0.2   
x2  Orange  0.3     
x2  Mango   0.1  
x3  Orange  0.3  
x3  Mango   0.2  
x3  Apple   0.1  

Я хочу, чтобы мой final_df содержал все строки, содержащиеся в df_a, так что уникальная комбинация A иB == A и B_new в df_b.

Я попытался выполнить внешнее соединение, а затем отбросить дубликаты по столбцам A и B в final_df, но значение B_new не сохраняется.

Вот как я хочу, чтобы мой result_df выглядел так:

result_df

 A   B       C      D     E   B_new  F
x1  Apple   0.3   0.9    0.6  Apple  0.3
x1  Orange  0.1   0.5    0.2  Orange 0.1
x2  Apple   0.2   0.2    0.1  Apple   0.2 
x2  Orange  0.3   0.4    0.9  Orange  0.3
x2  Mango   0.1   0.2    0.3  Mango   0.1
x3  Orange  0.3   0.1    0.2  Orange  0.3

Я также пробовал левое внешнее соединение:

final_df = pd.merge(df_a, df_b, how="left", on=['A'])

Размер этого кадра данных представляет собой объединение df_a и df_b, что не то, что я хочу.

Ценю любые предложения.

1 Ответ

0 голосов
/ 30 ноября 2018

Вам необходимо внутреннее слияние, определяющее оба столбца слияния в каждом случае:

res = df_a.merge(df_b, how='inner', left_on=['A', 'B'], right_on=['A', 'B_new'])

print(res)

    A       B    C    D    E   B_new    F
0  x1   Apple  0.3  0.9  0.6   Apple  0.3
1  x1  Orange  0.1  0.5  0.2  Orange  0.1
2  x2   Apple  0.2  0.2  0.1   Apple  0.2
3  x2  Orange  0.3  0.4  0.9  Orange  0.3
4  x2   Mango  0.1  0.2  0.3   Mango  0.1
5  x3  Orange  0.3  0.1  0.2  Orange  0.3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...