python - 比较列中相同值的行并生成矩阵
问题描述
我有一个像下面这样的数据框,想比较彼此之间的行。之后,它应该计算两行在所有列中的值 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)
解决方案
你可以检查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
推荐阅读
- hyperledger-composer - 在 Composer 中更新资产
- unit-testing - Jest 异步测试通知测试以失败结束
- microsoft-cognitive - 为 IoT Edge 部署 Azure 人脸 API
- ignite - Ignite 服务器节点在从缓存存储中抛出用户定义的异常时崩溃
- html - 创建标题/内容 CSS 网格布局的更简洁方法
- dynamics-crm - 我无法在 Dynamics365 中禁用用户
- javascript - 将每个字母更改为大写并将其括在括号中
- arrays - 使用 apply 从矩阵构建特征张量
- python - 读取文件并在 tkinter 中写入行的 Python 函数
- etl - 组合不同的数据流并通过排序输出创建 .txt 文件