将 pandas 数据帧转换为用于网络分析的数据帧

Converting pandas dataframe into a dataframe for network analysis

我阅读了多个问题,但没有看到解决方案或遗漏了什么

我有一个数据框

Author_id Article_id Rank
    100     10         1
    101     10         2
    102     10         3
    100     11         1
    105     11         2
    106     11         3

预期输出:

 Author_id1 Author_id2 Article_id Rank
   100        101         10        1
   100        102         10        1
   100        105         11        1
   100        106         11        1
   101        100         10        2
   101        102         10        2
   102        100         10        3
   102        101         10        3
   105        100         11        2
   105        106         11        2
   106        100         11        3
   106        105         11        3

如果我对所需数据集的理解不正确,请告知如何重组此数据。谢谢!

如果 DataFrame 在 ['Author_id', 'Article_id'] 上没有重复,您可以在文章中执行 self-merge,并过滤掉与它们自己合并的行。

df1 = (df.merge(df.drop(columns='Rank'), on='Article_id', suffixes = ['1', '2'])
         .query('Author_id1 != Author_id2')
         .sort_values(['Author_id1', 'Rank'])
         .reset_index(drop=True))

    Author_id1  Article_id  Rank  Author_id2
0          100          10     1         101
1          100          10     1         102
2          100          11     1         105
3          100          11     1         106
4          101          10     2         100
5          101          10     2         102
6          102          10     3         100
7          102          10     3         101
8          105          11     2         100
9          105          11     2         106
10         106          11     3         100
11         106          11     3         105