如何在python中的熊猫中按列和行名获取值

时间:2019-08-16 05:56:09

标签: pandas

我使用大熊猫得到了一个共现矩阵,如下所示。

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。

enter image description here

和所有共生计数应为9,如下所示(因为矩阵是对称的)。

enter image description here

我想知道是否有可能在大熊猫中做到这一点。

很高兴在需要时提供更多详细信息。

2 个答案:

答案 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。您可以根据需要进行更改。