比较各列中相同值的行,并生成矩阵

时间:2018-11-28 22:45:23

标签: python pandas numpy

我有一个像下面这样的数据框,想相互比较行。之后,应该计算两列在所有列中的值多为1的频率。

object |A|B|C|D|E
101     1 1 1 1 1
102     1 0 1 0 0
103     0 1 0 1 1

我想看到的内容(我把NaN放进去是因为将同一行与其自身进行比较没有意义)。

   101 | 102 | 103
101 NaN   2     3
102 2   NaN     0
103 3     0     NaN

现在我只这样做,但这仅针对列而不是行:

data=pd.DataFrame()#dummy
matrix=data.T.dot(data.T)

1 个答案:

答案 0 :(得分:2)

您可以使用dot

进行检查
s=df.iloc[:,1:].values
s.dot(s.T)
Out[308]: 
array([[5, 2, 3],
       [2, 2, 0],
       [3, 0, 3]], dtype=int64)

然后我们重新创建数据框

newdf=pd.DataFrame(s.dot(s.T),index=df.object,columns=df.object)
newdf=newdf.astype(float)
newdf.values[[np.arange(len(newdf))]*2]=np.nan # mask the diagonal to nan
newdf
Out[312]: 
object  101  102  103
object               
101     NaN  2.0  3.0
102     2.0  NaN  0.0
103     3.0  0.0  NaN
相关问题