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

Python如何将两列数据转换为组合频次计数矩阵?

两列分类值转N×M频次矩阵实现方案

需求说明

存在两列分类数据:

  • 第1列共N个唯一取值,作为矩阵行索引
  • 第2列共M个唯一取值,作为矩阵列名
  • 矩阵每个元素存储对应行、列取值组合在原始数据中的出现次数
  • 方案需支持两列存在2个以上不同取值的通用场景

示例测试数据

import pandas as pd
days = ['Monday','Tuesday','Monday','Tuesday','Tuesday','Monday']
weather = ['Rain','Sun','Sun','Sun','Rain','Rain']
df = pd.DataFrame({'day':days,'weather':weather})

上述示例预期输出2×2矩阵:行索引为Monday/Tuesday,列名为Rain/Sun,矩阵值为[[2,1],[1,2]],对应统计结果:周一降雨2次、周一晴天1次、周二降雨1次、周二晴天2次。

实现代码

直接使用pandas内置的pd.crosstab()方法即可,该方法专门用于统计两个分类变量的交叉频次,自动适配任意数量的分类值,无需手动编写循环统计逻辑:

# 生成交叉频次矩阵
freq_matrix = pd.crosstab(index=df['day'], columns=df['weather'])

# 打印矩阵
print(freq_matrix)

运行输出:

weather  Rain  Sun
day               
Monday      2    1
Tuesday     1    2

如果需要提取纯数值的二维数组格式,直接访问.values属性即可:

print(freq_matrix.values)

输出:

[[2 1]
 [1 2]]

补充说明

  • 该方法会自动识别两列的所有唯一值生成行、列标签,未出现的行列组合会自动填充0,不需要额外做缺失值补全
  • 如果需要调整行、列的排序,可以在生成矩阵后用.reindex()方法手动指定标签顺序
  • 方法自带归一化、添加边际合计等常用参数,可直接调用满足扩展需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:00:10