首页 > 解决方案 > 使用 pandas 计算来自 df 的节点之间的社交距离

问题描述

我想创建一个数据框来指示专利之间的社会距离。我已经有一个显示(共同)发明人和专利的附属网络的数据框。这个想法是根据附属发明人计算连接两个专利的最小节点数(专利)。例如,同一发明人 A 正在研究 P1 和 P2,因此距离应该为 0。P3 和 P1 之间的距离将为 1,因为 A (P1) 与 C 在 P2 上工作,C 在 P3 上工作。但是,仅当目标(种类)专利比源专利年轻时才应计算距离,例如,不应包括从 P3 到 P1 的距离。Inventor_id 和 Patent_id 是真实数据集中的 int 值。

>>> import pandas as pd
>>> df_affiliation = pd.DataFrame({'inventor_id':['A','A','B','B','C','C','D'],
...                               'patent_id':['P1','P2','P1','P4','P2','P3','P3','P5'],
...                               'year':[1986,1987,1986,1989,1987,1988,1988]})
>>> df_affiliation
  inventor_id  patent_id  year
0           A         P1  1986
1           A         P2  1987
2           B         P1  1986
3           B         P4  1989
4           C         P2  1987
5           C         P3  1988
6           D         P3  1988

新的数据框应如下所示:

>>> df_distance = pd.DataFrame({'source_patent_id':['P1','P1','P1','P2','P2','P3'],
...                             'destination_patent_id':['P2','P3','P4','P3','P4','P4'],
...                             'distance':[0,1,0,0,1,2]})
>>> df_distance
  source_patent_id destination_patent_id  distance
0               P1                    P2         0
1               P1                    P3         1
2               P1                    P4         0
3               P2                    P3         0
4               P2                    P4         1
5               P3                    P4         2

为了使潜在的社会联系更清晰,请参阅 Singh (2005) 的说明。协作网络作为知识扩散模式的决定因素1

标签: pythonpandasdataframe

解决方案


推荐阅读