如何在python中获取熊猫的x和y值对

时间:2019-03-10 03:53:46

标签: python pandas

我使用熊猫创建了一个共现矩阵,如下所示。

import pandas as pd
import numpy as np

lst = [
    ['a', 'b'],
    ['b', 'c', 'd', 'e', 'e'],
    ['a', 'd', 'e'],
    ['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  1
b  1  0  1  1  3
c  0  1  0  1  2
d  1  1  1  0  3
e  1  3  2  3  0

我想将上述数据帧转换为(x,y)对。如您所见,输出矩阵是对称的(即对角线的上部和对角线的下部相似)。因此,我很高兴只从其中一部分中获得(x,y)对(例如,仅使用上部)。

因此,在上面的矩阵中,输出应该是(即(x,y)对,其值大于零>0

[('a','b'), ('a', 'd'), ('a','e'), ('b', 'c'), ('b', 'd'), ('b', 'e'), 
('c', 'd'), ('c', 'e'), ('d', 'e')]

是否可以在熊猫中执行此操作?

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

3 个答案:

答案 0 :(得分:5)

您可以尝试np.where

PATH

然后您可以过滤列表:

arr = np.where(v>=1)
corrs = [(v.index[x], v.columns[y]) for x, y in zip(*arr)]
corrs

[('a', 'b'),
 ('a', 'd'),
 ('a', 'e'),
 ('b', 'a'),
 ('b', 'c'),
 ('b', 'd'),
 ('b', 'e'),
 ('c', 'b'),
 ('c', 'd'),
 ('c', 'e'),
 ('d', 'a'),
 ('d', 'b'),
 ('d', 'c'),
 ('d', 'e'),
 ('e', 'a'),
 ('e', 'b'),
 ('e', 'c'),
 ('e', 'd')]

答案 1 :(得分:3)

这也有效:

axs = imshow(flower_tensor_image.detach().cpu().numpy(), ax = plt)

答案 2 :(得分:3)

对上三角矩阵使用numpy.triu,通过numpy.nonzeronumpy.where获取索引,并通过索引创建的索引和列的最后zip值:

i, c = np.nonzero(np.triu(v.values))
#alternative
#i, c = np.where(np.triu(v.values))
L = list(zip(v.index[i], v.columns[c]))
print (L)
[('a', 'b'), 
 ('a', 'd'), 
 ('a', 'e'), 
 ('b', 'c'), 
 ('b', 'd'), 
 ('b', 'e'), 
 ('c', 'd'), 
 ('c', 'e'), 
 ('d', 'e')]