Панды: Создать новый столбец, сравнивая 2 столбца в 2 разных фреймах данных - PullRequest
0 голосов
/ 01 ноября 2018

У меня 2 кадра данных в пандах.

in_degree:

    Target  in_degree
0   2   1
1   4   24
2   5   53
3   6   98
4   7   34

out_degree

 Source out_degree
0   1   4
1   2   4
2   3   5
3   4   5
4   5   5

Сравнивая 2 столбца, я хотел бы создать новый фрейм данных, в который следует добавить столбцы "in_degree" и "out_degree" и отобразить результат.

Пример вывода должен выглядеть как

 Source/Target  out_degree
0   1   4
1   2   5
2   3   5
3   4   29
4   5   58

Любая помощь будет оценена.

Спасибо.

1 Ответ

0 голосов
/ 01 ноября 2018

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

x = df2.set_index('Source')
y = df1.set_index('Target').rename_axis('Source')
y.columns = x.columns

x.add(y.reindex(x.index), fill_value=0).reset_index()

   Source  out_degree
0       1         4.0
1       2         5.0
2       3         5.0
3       4        29.0
4       5        58.0

"Традиционным" способом SQL для решения этой проблемы было бы использование слияния:

v = df1.merge(df2, left_on='Target', right_on='Source', how='right')
dct = dict(
    Source=v['Source'],
    out_degree=v['in_degree'].add(v['out_degree'], fill_value=0)) 

pd.DataFrame(dct).sort_values('Source')

   Source  out_degree
3       1         4.0
0       2         5.0
4       3         5.0
1       4        29.0
2       5        58.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...