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

如何基于Pandas DataFrame的x、y坐标列判断数据所属象限

实现方案

你完全可以通过循环完成该需求,也可以使用pandas生态下的向量化操作实现,后者运行效率更高、代码更简洁,两种实现方式如下:

1. 循环实现

适合小数据量场景,逻辑和你描述的判断规则完全对齐:

import pandas as pd

# 假设你的DataFrame变量名为 df
for idx, row in df.iterrows():
    x = row['x_center']
    y = row['y_center']
    if x >= 0 and y >= 0:
        df.loc[idx, 'quadrant'] = 1
    elif x < 0 and y >= 0:
        df.loc[idx, 'quadrant'] = 2
    elif x < 0 and y < 0:
        df.loc[idx, 'quadrant'] = 3
    elif x > 0 and y < 0:
        df.loc[idx, 'quadrant'] = 4

2. 向量化实现(推荐)

利用numpy.select批量处理所有行,数据量越大性能优势越明显:

import pandas as pd
import numpy as np

# 按顺序定义所有判断条件
conditions = [
    (df['x_center'] >= 0) & (df['y_center'] >= 0),
    (df['x_center'] < 0) & (df['y_center'] >= 0),
    (df['x_center'] < 0) & (df['y_center'] < 0),
    (df['x_center'] > 0) & (df['y_center'] < 0)
]
# 定义条件对应返回的象限值
quadrant_values = [1, 2, 3, 4]
# 批量赋值给quadrant列
df['quadrant'] = np.select(conditions, quadrant_values)

最终计算结果

对你给出的示例数据执行代码后,结果如下:

tooth_idx_centery_centerwidthheightquadrant
10.3096430.0825200.0723250.1694761
2-0.211200-0.0576750.0713210.1996453
3-0.307634-0.1277730.0813660.1872233
4-0.262933-0.0936110.0652940.2111803
50.2531390.1366460.0969360.1907721

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:06:03