我使用大熊猫得到了一个共现矩阵,如下所示。
lst = [
['a', 'b'],
['b', 'c', 'd', 'e'],
['a', 'd'],
['b', 'e']
]
u = (pd.get_dummies(pd.DataFrame(lst), prefix='', prefix_sep='')
.groupby(level=0, axis=1)
.sum())
v = u.T.dot(u)
v.values[(np.r_[:len(v)], ) * 2] = 0
print(v)
我的输出如下。
a b c d e
a 0 1 0 1 0
b 1 0 1 1 2
c 0 1 0 1 1
d 1 1 1 0 1
e 0 2 1 1 0
我想使用上述矩阵(即1
用 d 出现 e 次,然后除以co-出现(即9
->因为矩阵是对称的,所以我只考虑矩阵的上半部分来获得总和)。
所以我的输出应该是
对于e和d的共现计数为1。
和所有共生计数应为9,如下所示(因为矩阵是对称的)。
我想知道是否有可能在大熊猫中做到这一点。
很高兴在需要时提供更多详细信息。
答案 0 :(得分:1)
我相信您只需要对上矩阵进行所有值的和除,因此将2
除:
v = v / (v.values.sum() / 2)
print(v)
a b c d e
a 0.000000 0.111111 0.000000 0.111111 0.000000
b 0.111111 0.000000 0.111111 0.111111 0.222222
c 0.000000 0.111111 0.000000 0.111111 0.111111
d 0.111111 0.111111 0.111111 0.000000 0.111111
e 0.000000 0.222222 0.111111 0.111111 0.000000
对于一个值:
print(v.loc['d','e'] / (v.values.sum() / 2))
0.1111111111111111
如果需要分配一个值:
v.loc['d','e'] = v.loc['d','e'] /v.values.sum() / 2
print(v)
a b c d e
a 0 1 0 1 0.000000
b 1 0 1 1 2.000000
c 0 1 0 1 1.000000
d 1 1 1 0 0.111111
e 0 2 1 1 0.000000
答案 1 :(得分:1)
这对您有用吗?
a=df.loc['e','b']
b=df.values.sum()/2
print((a/b))
在loc
方法内部,第一个值为row,第二个值为column。您可以根据需要进行更改。