Объедините два кадра данных с одинаковыми значениями в нескольких столбцах - PullRequest
3 голосов
/ 10 мая 2019

Я хотел бы объединить два кадра данных с одинаковым индексным номером, но с разными номерами столбцов, например:

>>> df1
   col_1 col_2 col_3 col_4
0    a     x    NaN    54
1    a     y     5     34
2    b     z    NaN    64
3    c     z     7     23


>>> df2
   col_1 col_2 col_3 col_4 col_5
0    a     x    NaN    14    14
1    b     z    NaN     9     7
2    c     z     7     51    53
3    a     y     5     87    66

df2 объединится в df1 на основе значений col_1, col_2 и col_3.

Но порядок строк не будет одинаковым.

Я хочу объединить их на основе порядка df1

Иответ будет таким:

   col_1 col_2 col_3 col_4 col_4 col_5
0    a     x    NaN    54    14    14
1    a     y     5     34    87    66
2    b     z    NaN    64     9     7
3    c     z     7     23    51    53

Меня не волнует название столбца, поэтому вы, ребята, можете изменить их, если вам нужно.

Ответы [ 3 ]

3 голосов
/ 10 мая 2019

Если я правильно понимаю, вы хотите объединить индексы без сортировки:

result = df1.join(df2.drop(columns=['col_1', 'col_2', 'col_3']), lsuffix='x', rsuffix='y', sort=False)
print(result)

Выход:

  col_1 col_2 col_3 col_4x col_4y col_5
0     a     x   NaN     54     14    14
1     a     y     5     34      9     7
2     b     z   NaN     64     51    53
3     c     z     7     23     87    66

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

result = df1.merge(df2, on=['col_1', 'col_2', 'col_3'], sort=False)
print(result)

Выход:

  col_1 col_2 col_3 col_4_x col_4_y col_5
0     a     x   NaN      54      14    14
1     a     y     5      34      87    66
2     b     z   NaN      64       9     7
3     c     z     7      23      51    53
1 голос
/ 10 мая 2019

Вы можете использовать:

df1.merge(df2, how='right', on=['col_1', 'col_2', 'col_3'], sort=False)

  col_1 col_2  col_3  col_4_x  col_4_y  col_5
0     a     x    NaN       54       14     14
1     a     y    5.0       34       87     66
2     b     z    NaN       64        9      7
3     c     z    7.0       23       51     53
0 голосов
/ 10 мая 2019

Просто используйте доступную функцию слияния

import pandas as pd

df=df1.merge(df2,left_index=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...