Дано pandas
DataFrame df
:
paper reference count
9384155 p25 r50 1
7434371 p98 r9 78
7433400 p7 r27 5
7431765 p101 r91 501
7422256 p22 r5 91
...
Создан словарь df_dict
, который подставляет df
на count
:
df_dict={key:df[df['count']==key] for key in df['count'].unique()}
df_dict
{1: paper reference count
9384155 p10 r72 1
7434371 p94 r5 1
7433400 p71 r90 1
...
7431765 p3 r113 1
7422256 p78 r18 1
[5693 rows x 3 columns],
2: paper reference count
3817395 p102 r6 2
4726581 p54 r3 2
...
Я хотелиспользуйте операцию .merge()
для каждого подкадра в df_dict
:
for key, value in df_dict.items():
c = df_dict[key]
c = c.drop(['count'], axis=1)
pairs = c.merge(c,on=['reference'])
pairs = pairs[pairs["paper_x"] < pairs["paper_y"]]
pairs = pairs.groupby(["paper_x", "paper_y"]).count().reset_index()
pairs = pairs.drop(['count_x'], axis=1)
pairs.columns = ["paper1", "paper2", "common"]
refs = c.groupby(["paper"]).count().reset_index()
refs = refs.drop(['count'], axis=1)
refs.columns = ["paper", "count", "freq"]
result = pairs.merge(refs, how="left", left_on="paper1", right_on="paper")
result = result.merge(refs, how="left", left_on="paper2", right_on="paper")
result = result[["paper1", "freq_x", "paper2", "freq_y", "count", "common"]]
result.columns = ["paper1", "freq1", "paper2", "freq2", "count", "common"]
key += 1
, но операция возвращает один большой объект DataFrame с неверными значениями. Как я могу выполнить эту операцию и при этом сохранить словарную форму, разделенную count
?