Сравните два кадра данных и создайте матрицу сравнения в Python? - PullRequest
1 голос
/ 02 мая 2020

Emp_rating_df

  Emp_Id       A1   A2   A3   A4
0 1001         4    3    6    7
1 1002         7    2    4    5
2 1003         3    8    2    6
3 1004         7    5    4    7

Comp_df

  Emp_Id       A1   A2   A3   A4
0 1001         4    3    6    7

Мне нужно сравнить два df, которые содержат оценки сотрудников.

Emp_rating_df содержит оценки сотрудников из 10 и Comp_df указывает, какого сотрудника сравнивать со всеми сотрудниками из Emp_rating_df.

Если emp A имеет рейтинг больше, чем в каком-либо конкретном столбце преимуществ (A1, A2, A3, A4), то emp B затем 2, если то же самое, то 1 иначе 0.

Output_df-

 Emp_Id       A1   A2   A3   A4
0 1001         1    1    1    1 
1 1002         0    2    2    2
2 1003         2    0    2    2
3 1004         0    0    2    1

Первая строка будет 1 из-за собственного сравнения.

1 Ответ

1 голос
/ 02 мая 2020

Вы можете попробовать следующий подход:

Первое слияние и фильтр:

m = Emp_rating_df.merge(Comp_df,'left','Emp_Id').ffill().bfill()
a = m.filter(like='_x')
b = m.filter(like='_y')

Затем назначьте по условию:

cond1 = b.to_numpy() > a.to_numpy()
cond2 = b.to_numpy() == a.to_numpy()
Output = Emp_rating_df.copy()
Output[a.columns.str.split('_').str[0]] = np.select([cond1,cond2],[2,1],0)

print(Output)

   Emp_Id  A1  A2  A3  A4
0    1001   1   1   1   1
1    1002   0   2   2   2
2    1003   2   0   2   2
3    1004   0   0   2   1
...