Как объединить большие словари в Python? - PullRequest
0 голосов
/ 21 октября 2019

Дано 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...