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

如何为散点图各象限数据创建QUADRANT分类变量?

简洁实现自定义象限标记的方法

针对手动定义坐标轴区间、为数据点分配象限编号的需求,这里提供两种比嵌套np.where()更简洁的实现方式:

方法1:分箱+映射表(灵活适配任意编号规则)

先对x、y轴分别分箱,再通过自定义映射表直接匹配象限编号,适合编号规则无规律的场景。

import pandas as pd
import numpy as np

# 模拟示例数据
df = pd.DataFrame({
    'x': np.random.uniform(0, 80, 100),
    'y': np.random.uniform(0, 150, 100)
})

# 手动定义区间边界
x_bins = [0, 20, 40, 60, 80]  # x轴划分4个区间
y_bins = [0, 60, 120, 150]    # y轴划分3个区间

# 为x、y生成分箱标签
df['x_segment'] = pd.cut(df['x'], bins=x_bins, labels=['x1','x2','x3','x4'], include_lowest=True)
df['y_segment'] = pd.cut(df['y'], bins=y_bins, labels=['y1','y2','y3'], include_lowest=True)

# 自定义象限编号映射(完全按你的需求定义)
quadrant_mapping = {
    ('y3', 'x1'): 1, ('y3', 'x2'): 2, ('y3', 'x3'): 3, ('y3', 'x4'): 4,
    ('y2', 'x1'): 5, ('y2', 'x2'): 6, ('y2', 'x3'): 7, ('y2', 'x4'): 8,
    ('y1', 'x1'): 9, ('y1', 'x2'): 10, ('y1', 'x3'): 11, ('y1', 'x4'): 12
}

# 生成QUADRANT列
df['QUADRANT'] = df[['y_segment', 'x_segment']].apply(tuple, axis=1).map(quadrant_mapping)

# 可选:清理中间分箱列
df = df.drop(['x_segment', 'y_segment'], axis=1)

方法2:索引计算(适合规则排列的象限)

如果象限编号是按固定顺序排列的(比如y从高到低、x从左到右依次编号),可以用np.digitize获取区间索引,直接计算编号,无需手动写映射表。

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'x': np.random.uniform(0, 80, 100),
    'y': np.random.uniform(0, 150, 100)
})

# 手动定义区间边界(right=True让区间左闭右开,适配你的范围要求)
x_bins = [0, 20, 40, 60, 80]
y_bins = [0, 60, 120, 150]

# 获取x、y所在区间的索引(从1开始计数)
x_idx = np.digitize(df['x'], x_bins, right=True)
y_idx = np.digitize(df['y'], y_bins, right=True)

# 按y从高到低、x从左到右的规则计算编号
# y有3个区间,每个y区间对应4个x编号,y_idx=3对应最高y区间,编号从1开始
df['QUADRANT'] = (3 - y_idx) * len(x_bins[:-1]) + x_idx

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:05:08