В настоящее время у меня есть pandas
DataFrame df
:
paper reference
2171686 p84 r51
3816503 p41 r95
4994553 p112 r3
2948201 p112 r61
2957375 p32 r41
2938471 p65 r41
...
Здесь каждая строка df
показывает отношение цитирования между paper
и reference
(где paper
cites reference
).
Мне нужны следующие цифры для моего анализа:
Частота элементов paper
в df
Когда два элемента из paper
выбраны случайным образом, число reference
, которое они приводят вместе
Для номера 1 я выполнил следующее:
df_count = df.groupby(['paper'])['paper'].count()
Для числа 2 я выполнил операцию, которая возвращает пары элементов в paper
, которые ссылаются на один и тот же элемент в reference
:
from collections import defaultdict
pair = []
d = defaultdict(list)
for idx, row in df.iterrows():
d[row['paper']].append(row['paper'])
for ref, lst in d.items():
for i in range(len(lst)):
for j in range(i+1, len(lst)):
pair.append([lst[i], lst[j], ref])
pair
- это список, которыйсостоит из трех элементов: первые два элемента представляют собой пару paper
, а третий элемент относится к reference
, на который ссылаются оба paper
элемента. Ниже показано, как выглядит pair
:
[['p88','p7','r11'],
['p94','p33','r11'],
['p75','p33','r43'],
['p5','p12','r79'],
...]
Я хотел бы получить DataFrame в следующем формате:
paper1 freq1 paper2 freq2 common
p17 4 p45 3 2
p5 2 p8 5 2
...
, где paper1
и paper2
представляют первоедва элемента каждого списка pair
, freq1
и freq2
представляют счетчик частоты каждой бумаги, выполненной с помощью df_count
, а common
- это число reference
и paper1
и paper2
цитироватьв общих чертах.
Как мне получить желаемый набор данных (в нужном формате) из df
, df_count
и pair
?