сравнивать строки в фрейме данных для изменения значений - PullRequest
0 голосов
/ 13 мая 2018

Я использую python3, и есть два фрейма данных: df1 df2

df1
 num1 num2 num3 class
0 1    2   3     0
1 1    2   4     0
2 1    2   5     0
3 2    2   4     0



df2
 num1 num2 num3 class
0 1    2   3     1
1 1    2   4     1 

Я хочу сравнить два фрейма данных, чтобы строки в df1, а также в df2 использовали значение класса изdf2 как в приведенном выше примере.

Результат должен быть следующим:

df12
  num1 num2 num3 class
 0 1    2   3     1
 1 1    2   4     1
 2 1    2   5     0
 3 2    2   4     0

любая помощь будет оценена!

1 Ответ

0 голосов
/ 13 мая 2018

Вы можете выполнить внешнее слияние на ['num1', 'num2', 'num3'] и сохранить столбец class только с df2 (поэтому сбросьте class с df1):

df12 = (df1.merge(df2, on=['num1', 'num2', 'num3'], how = 'outer')
          .fillna(0)
          .drop('class_x', axis=1))

>>> df12
#    num1  num2  num3  class_y
# 0     1     2     3      1.0
# 1     1     2     4      1.0
# 2     1     2     5      0.0
# 3     2     2     4      0.0

Редактировать : как подсказывает @ cᴏʟᴅsᴘᴇᴇᴅ, сначала немного убрать class из df1, а затем выполнить слияние:

df12 = (df1.drop('class', 1)
        .merge(df2, how='left')
        .fillna(0)
        .astype({'class' : int}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...