如何在Pandas DataFrame中确定给定x和y坐标列的象限



数据帧格式:

<表类> tooth_id x_center y_center 宽度高度象限tbody><<tr>10.3096430.0825200.0723250.1694762-0.211200-0.0576750.0713210.1996453-0.307634-0.1277730.0813660.1872234-0.262933-0.0936110.0652940.21118050.2531390.1366460.0969360.190772

解决方案

这是另一个解决方案,使用arctan2和一些模运算。请注意,Corralien的方法更加一般化。下面的内容是非常特定于这个用例的。

import numpy as np
deg = np.round(180 * np.arctan2(df.y_center, df.x_center) / np.pi).astype(int)
df["quadrant"] = 1 + ((deg + 360) % 360) // 90

输出:

>>> df
tooth_id  x_center  y_center     width    height  quadrant
0         1  0.309643  0.082520  0.072325  0.169476         1
1         2 -0.211200 -0.057675  0.071321  0.199645         3
2         3 -0.307634 -0.127773  0.081366  0.187223         3
3         4 -0.262933 -0.093611  0.065294  0.211180         3
4         5  0.253139  0.136646  0.096936  0.190772         1

注意,坐标轴上的点是"滚动"的。沿逆时针方向进入相邻象限,例如,位于90°的(0, 0.631)点被认为是象限2;位于180°的(-0.578, 0)为象限3,以此类推

步骤用np.arctan2()(x, y)各点形成的角度(度):

>>> deg = np.round(180 * np.arctan2(df.y_center, df.x_center) / np.pi).astype(int)
>>> deg
0     15
1   -165
2   -157
3   -160
4     28
dtype: int32

现在,将(-180°, 180°]转换为[0°, 360°):

>>> deg = (deg + 360) % 360
>>> deg
0     15
1    195
2    203
3    200
4     28
dtype: int32

地板除以90得到象限(它将返回0,1,2,3——所以也加1):

>>> quadrant = 1 + (deg // 90)
>>> quadrant
0    1
1    3
2    3
3    3
4    1
dtype: int32

使用np.select:

# Update: change 'df.x_center > 0' to 'df.x_center >= 0'
# See comment of @ddejohn below
df['quadrant'] = np.select([(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)],
choicelist=[1, 2, 3, 4])

输出:

>>> df
tooth_id  x_center  y_center     width    height  quadrant
0         1  0.309643  0.082520  0.072325  0.169476         1
1         2 -0.211200 -0.057675  0.071321  0.199645         3
2         3 -0.307634 -0.127773  0.081366  0.187223         3
3         4 -0.262933 -0.093611  0.065294  0.211180         3
4         5  0.253139  0.136646  0.096936  0.190772         1

相关内容

  • 没有找到相关文章

最新更新