Python:如何从pandas数据框架创建协作网络?

时间:2016-03-03 22:01:58

标签: python pandas social-networking

我有一个像以下

的DataFrame
df = pd.DataFrame( {'Item':['A','A','A','B','B','C','C','C','C'], 
    'Name': ['Tom','John','Paul','Tom','Frank','Tom', 'John', 'Richard', 'James'],
    'Total':[3,3,3,2,2,4,4,4,4]})

print df

Item Name  Total
A    Tom     3
A    John    3
A    Paul    3
B    Tom     2 
B    Frank   2
C    Tom     4
C    John    4 
C    Richard 4 
C    James   4

我想创建一个协作网络,该协作网络在两对之间的Total协作和同一NameItem的数量上进行规范化。最后我想要像

这样的东西
df1 

Name     Name1     Item       Total 
 Tom     John        A          3
 Tom     John        C          4
 Tom     Paul        A          3
 Tom     Frank       B          2
 Tom     Richard     C          4 
 Tom     James       C          4
 John    Paul        A          3
 John    Richard     C          4
 Richard James       C          4

1 个答案:

答案 0 :(得分:1)

我认为这会得到你想要的。我使用groupbyItem分组,该cnxns = [] for k,g in df.groupby('Item'): [cnxns.extend((n1,n2,k,len(g)) for n1,n2 in combinations(g['Name'], 2))] pd.DataFrame(cnxns, columns=['Name', 'Name1', 'Item', 'Total']) Name Name1 Item Total 0 Tom John A 3 1 Tom Paul A 3 2 John Paul A 3 3 Tom Frank B 2 4 Tom John C 4 5 Tom Richard C 4 6 Tom James C 4 7 John Richard C 4 8 John James C 4 9 Richard James C 4 连接了两个名称和组内的itertools.combinations

(John, James, C, 4)

可能是一种更好的方法,但这应该按照你的要求做。

我的输出和您想要的输出之间的唯一区别是我包含ng-model,但也许您想要(假设我正确理解了问题)?