如何基于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_id | x_center | y_center | width | height | quadrant |
|---|---|---|---|---|---|
| 1 | 0.309643 | 0.082520 | 0.072325 | 0.169476 | 1 |
| 2 | -0.211200 | -0.057675 | 0.071321 | 0.199645 | 3 |
| 3 | -0.307634 | -0.127773 | 0.081366 | 0.187223 | 3 |
| 4 | -0.262933 | -0.093611 | 0.065294 | 0.211180 | 3 |
| 5 | 0.253139 | 0.136646 | 0.096936 | 0.190772 | 1 |
内容的提问来源于stack exchange,提问作者Yumeng Xu
相关产品推荐
相关产品推荐

