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

如何基于矩阵型pandas DataFrame绘制配对数值分布直方图

行列交叉表数值分布直方图实现方案

你的这种类乘法表结构本质是行列索引交叉的二维数值表,要统计所有行列配对值的分箱计数,不需要复杂的配对遍历,直接展平二维数据即可绘图,实现步骤如下:

  • 首先导入依赖并构造示例数据表
import pandas as pd
import matplotlib.pyplot as plt

group_a = {'ba':[2.0,9.4,10.8],
          'bb':[4.2,7.1,3],
          'bc':[8.1,9.5,6.1]}
A = pd.DataFrame(group_a, index=['aa','ab','ac'])
  • 提取所有行列交叉点的数值
    两种方法都可以拿到全部9个行-列配对的一维数值序列:
    1. 直接展平numpy数组:all_vals = A.values.flatten()
    2. 用pandas的stack方法转换:all_vals = A.stack()
      两种方式得到的结果完全一致,包含所有交叉点的值:[2.0, 4.2, 8.1, 9.4, 7.1, 9.5, 10.8, 3.0, 6.1]
  • 绘制直方图
    直接调用直方图绘制接口即可,支持自定义分箱规则:
# 方式1:matplotlib绘图
plt.hist(all_vals, bins=5, edgecolor='black')
plt.xlabel('数值分箱')
plt.ylabel('落入分箱的行-列配对数量')
plt.show()

# 方式2:pandas内置绘图(更简洁,不需要单独展平数据)
A.stack().hist(bins=[0,3,6,9,12], edgecolor='black') # 此处bins传入自定义区间边界
plt.xlabel('数值分箱')
plt.ylabel('落入分箱的行-列配对数量')
plt.show()

参数说明:如果要自定义分箱,给bins传入分箱边界的列表即可,比如bins=[0,3,6,9,12]就会按照03、36、69、912四个固定区间统计配对数量;如果传入整数则会自动按数值范围等距划分对应数量的分箱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:12:23