Учитывая 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
на count
:
df_dict={key:df[df['count']==key] for key in df['count'].unique()}
Для каждого подкадра DataFrameв df_dict
я хотел бы применить следующие операции:
df_dict[i] = df_dict[i].drop(['count'], axis=1)
pairs = df_dict[i].merge(df_dict[i], on=["reference"])
pairs = pairs[pairs["paper_x"] < pairs["paper_y"]]
pairs = pairs.groupby(["paper_x", "paper_y"]).count().reset_index()
pairs.columns = ["paper1", "paper2", "common"]
refs = df_dict[i].groupby(["paper"]).count().reset_index()
refs.columns = ["paper", "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", "common"]]
result.columns = ["paper1", "freq1", "paper2", "freq2", "common"]
Обратите внимание, что я создал словарь, чтобы применить операцию ко всем фреймам данных с разными значениями count
по отдельности. Я попытался запустить цикл for
:
for i in range(df['count'].max()):
try:
c = df_dict[i]
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.columns = ["paper1", "paper2", "common"]
refs = c.groupby(["paper"]).count().reset_index()
refs.columns = ["paper", "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", "common"]]
result.columns = ["paper1", "freq1", "paper2", "freq2", "common"]
except KeyError:
continue
, но операция возвращает один большой DataFrame с неверными значениями.
(столбец count
в df
не обязательносодержит все целочисленные значения, поэтому может существовать KeyError
, который необходимо игнорировать.)
В идеале, я хотел бы иметь множественный набор result
DataFrames (разделенных count
, как они есть в df_dict
).