如何为散点图各象限数据创建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
相关产品推荐
相关产品推荐

