Объединение двух фреймов данных в некоторых перекрывающихся столбцах с сохранением неперекрывающихся столбцов - PullRequest
0 голосов
/ 26 сентября 2018

В настоящее время у меня есть два кадра данных:

df1:

     col1    col2   col3   col4
 0  Apple   store1    1      3
 1  Tree    store2    1      3
 2  Banana  store3    2      4
 3  Card    store4    2      4 ...

df2:

     col1    col2   col3   col4   col5   col6
 0  Apple   store1    1      3     123    50
 1  Tree    store2    1      3     451    32
 2  Mango   store2    2      4     313    15
 3  Guava   store5    2      4     113     9

Что я хочу сделать, это объединить df1 и df2 вместе, если значения в первых 4 столбцах идентичны, но я хочу добавить значения col5и col6 на объединенный фрейм данных.Таким образом, идеальный вывод будет:

merged_df:

     col1    col2   col3   col4   col5   col6
 0  Apple   store1    1      3     123    50
 1  Tree    store2    1      3     451    32 ...

Когда я пытаюсь объединить, я получаю значения NaN, возвращенные в col5 и col6 в объединенном фрейме данных.Есть идеи, пожалуйста?

Спасибо

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

вам нужно,

pd.merge(df1,df2,on=['col1','col2','col3','col4'])
[out]
#col1   col2    col3    col4    col5    col6
#Apple  store1  1       3       123     50
#Tree   store2  1       3       451     32
0 голосов
/ 26 сентября 2018

Вот более сложный пример с несколькими ключами соединения.Присутствуют только ключи, появляющиеся слева и справа (пересечение), поскольку по умолчанию how = 'inner'.

Из документов pandas:

result = pd.merge (влево, вправо, вкл = ['key1', 'key2'])

result = pd.merge(def1, df2, on=['col1','col2','col3','col4'])
0 голосов
/ 26 сентября 2018

Вы хотите внутреннее слияние.По умолчанию для объединения будут использоваться общие столбцы:

res = df1.merge(df2, how='inner')

print(res)

    col1    col2  col3  col4  col5  col6
0  Apple  store1     1     3   123    50
1   Tree  store2     1     3   451    32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...