Как сравнить два кадра данных в пандах и показать различия? - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть два фрейма данных, как упомянуто ниже. Я хочу отображать только несовпадающие строки. Есть ли в пандах способ сделать это?

DataFrame1

 emp_id emp_name    City    Salary
    111 aaa         pune    10000
    222 bbb         pune    20000
    333 ccc         mumbai  30000
    444 ddd         pune    40000

DataFrame2

 emp_id emp_name    City    Salary
    111 aaa         pune    60000
    222 bbb         pune    20000
    333 ccc         mumbai  30000
    444 eee         pune    40000

Требуемый выходной фрейм данных: -

emp_id  emp_name    City    Salary
111     aaa         pune    60000
444     eee         pune    40000

Ответы [ 5 ]

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

Вы хотите сделать внешнее соединение. Чтобы добиться этого, вы можете сделать следующее:

result = pd.merge(dataframe1, dataframe2, how = 'outer', right_on = 'emp_name', left_on = 'emp_name')

Таким образом, в предыдущей строке кода вы указываете, какой будет столбец для определения элементов, которые перейдут в результирующий кадр данных.

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

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

df1 = pd.DataFrame([["111", "aaa", "pune", "10000"],["222", "bbb", "pune", "20000"],["333", "ccc", "mumbai", "30000"],["444", "ddd", "pune", "40000"], ], columns=['emp_id', 'emp_name', 'City', 'Salary'])
df2 = pd.DataFrame([["111", "aaa", "pune", "60000"],["222", "bbb", "pune", "20000"],["333", "ccc", "mumbai", "30000"],["444", "eee", "pune", "40000"], ], columns=['emp_id', 'emp_name', 'City', 'Salary'])

print pd.concat([df2,df1]).drop_duplicates(keep=False).drop_duplicates(['emp_id'])

emp_id emp_name  City Salary
111     aaa  pune  60000
444     eee  pune  40000
0 голосов
/ 15 сентября 2018

Вы можете попробовать это:

df2[~df2.isin(df1).all(1)]

Выходы:

       emp_name  City  Salary
emp_id                       
111         aaa  pune   60000
444         eee  pune   40000

df2.isin (df1) выглядит так:

        emp_name  City  Salary
emp_id                        
111         True  True   False
222         True  True    True
333         True  True    True
444        False  True    True
0 голосов
/ 15 сентября 2018

Если ваша цель - проверить, чтобы все строки были одинаковыми, вы можете использовать следующий код

dataframe2.where(dataframe2.isin(dataframe1).all(axis=1)).dropna()
0 голосов
/ 15 сентября 2018

Объединить два кадра данных на ID сотрудника:

m = df1.merge(df2, how='outer', on=['emp_id'])

Найдите несовпадающие строки:

mismatched = (m.emp_name_x != m.emp_name_y) | \
             (m.City_x != m.City_y) |\
             (m.Salary_x != m.Salary_y)

Извлеките несовпадающие строки, выберите столбцы из второго кадра данных:

m[mismatched][['emp_id', 'emp_name_y', 'City_y', 'Salary_y']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...