You need to enable JavaScript to run this app. 如何用Pandas实现逐行值匹配计数并生成对应统计矩阵
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas实现逐行值匹配计数并生成对应统计矩阵

Pandas 行两两匹配计数矩阵实现方案

核心思路

不用嵌套循环逐行比对,利用numpy广播机制一次性完成全量运算,效率更高,尤其适合行数多的场景:

  • 先将name列设为索引,后续直接复用为矩阵的行列标签
  • 把数值列转成三维数组完成两两比较,同时过滤掉NA值的匹配结果
  • 按行对维度求和得到匹配数,最后转成DataFrame格式输出

完整代码

import pandas as pd
import numpy as np

# 数据构造(如果已经生成df可跳过这段)
data = {'name':['A001', 'A002', 'A003',
'A004','A005','A006','A007','A008'],
'Q1':[2,1,1,1,2,1,1,5],
'Q2':[4,4,4,2,4,2,5,4],
'Q3':[2,2,3,2,2,3,2,2],
'Q4':[5,3,5,2,3,2,4,5],
'Q5':[2,2,3,2,2,2,2,2]}
df = pd.DataFrame(data)
df.at[7, 'Q3'] = None

# 核心计算逻辑
# 1. 设置name为索引,仅保留Q开头的数值列
df = df.set_index('name')
val_arr = df.values

# 2. 广播完成所有行两两比较,同时排除NA值的匹配
equal_mask = val_arr[:, None] == val_arr
na_mask = np.isnan(val_arr[:, None]) | np.isnan(val_arr)
valid_equal = equal_mask & ~na_mask

# 3. 求和得到匹配数,转成DataFrame矩阵
match_matrix = pd.DataFrame(valid_equal.sum(axis=-1), index=df.index, columns=df.index)
print(match_matrix)

结果验证

输出的矩阵对角线为行和自身的匹配数:除A008为4(自身存在1个NA值不计入),其余行都是5,符合预期。任意两个不同行的交叉位置就是二者非NA值的匹配总计数。

内容的提问来源于stack exchange,提问作者Peaches

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 10:36:00