You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建统计同组内value共现频率的交叉表?

共现矩阵(Co-occurrence Matrix)实现方案

你要构建的统计交叉表叫做共现矩阵,它用于记录不同元素在同一组内共同出现的频次。下面直接给出基于Python pandas的实现方案,搭配示例数据说明:

示例数据

假设你的group数据集如下:

groupvalue
G1A
G1B
G1C
G2A
G2B
G3B
G3C
G4A
G4C

期望输出的共现矩阵:

ABC
A022
B202
C220

基础实现代码

import pandas as pd

# 1. 加载数据集(替换为你的实际数据)
data = pd.DataFrame({
    'group': ['G1', 'G1', 'G1', 'G2', 'G2', 'G3', 'G3', 'G4', 'G4'],
    'value': ['A', 'B', 'C', 'A', 'B', 'B', 'C', 'A', 'C']
})

# 2. 按group聚合,收集每个组内的value列表
group_vals = data.groupby('group')['value'].apply(list).reset_index()

# 3. 初始化全0的共现矩阵
unique_vals = data['value'].unique()
co_occur_mat = pd.DataFrame(0, index=unique_vals, columns=unique_vals)

# 4. 遍历每个组,统计value对的共现次数
for _, row in group_vals.iterrows():
    vals = row['value']
    # 遍历组内所有非重复的value对
    for i in range(len(vals)):
        for j in range(i+1, len(vals)):
            val_a, val_b = vals[i], vals[j]
            co_occur_mat.loc[val_a, val_b] += 1
            co_occur_mat.loc[val_b, val_a] += 1

# 5. 将对角线(自身共现)设为0
for val in unique_vals:
    co_occur_mat.loc[val, val] = 0

print(co_occur_mat)

大数据集优化方案

如果你的数据集规模较大,上面的双重循环效率偏低,可以用矩阵乘法实现高效计算:

import pandas as pd
import numpy as np

# 1. 生成value的one-hot编码矩阵
one_hot = pd.get_dummies(data['value'])
# 2. 按group聚合,得到每个组内value的出现标记(1表示出现)
group_one_hot = one_hot.groupby(data['group']).sum()
# 3. 矩阵乘法直接计算共现次数(含自身)
co_occur_mat = group_one_hot.T.dot(group_one_hot)
# 4. 清空对角线值
np.fill_diagonal(co_occur_mat.values, 0)

print(co_occur_mat)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:50:28