将角度旋转 90 度 pandas

rotate angles by 90 degrees pandas

我使用 np.arctan 从单个点返回每个时间点的角度。下面的指南针粗略地描绘了方向。

很好,但我希望将 罗盘 逆时针旋转 90 度。我在下面包括了第二个粗略的指南针来显示预期的方向。

df = pd.DataFrame({  
    'Time' : ['2021-03-27 10:46:48.100','2021-03-27 10:46:48.200','2021-03-27 10:46:48.300','2021-03-27 10:46:48.400'],        
    'id' : ['A','A','A','A'],                             
    'x' : [50.0,55.0,50.0,50.0],
    'y' : [25.0,20.0,20.0,15.0],             
    })


x = df.groupby('id')['x'].diff().fillna(0).astype(float) 
y = df.groupby('id')['y'].diff().fillna(0).astype(float) 

df['Rotation'] = np.arctan2(x, y) 
df['Alpha'] = np.degrees(df['Rotation'])

输出:

                      Time id     x     y  Rotation  Alpha
0  2021-03-27 10:46:48.100  A  50.0  25.0  0.000000    0.0
1  2021-03-27 10:46:48.200  A  55.0  20.0 -0.785398  135.0
2  2021-03-27 10:46:48.300  A  50.0  20.0  3.141593  -90.0
3  2021-03-27 10:46:48.400  A  50.0  15.0 -1.570796  180.0

预期输出:

                      Time id     x     y  Rotation    Alpha
0  2021-03-27 10:46:48.100  A  50.0  25.0  0.000000      0.0
1  2021-03-27 10:46:48.200  A  55.0  20.0  2.356194   -135.0
2  2021-03-27 10:46:48.300  A  50.0  20.0 -1.570796      0.0
3  2021-03-27 10:46:48.400  A  50.0  15.0  3.141593    -90.0

原始方向

               0
          -45  |  45
               | 
       -90 <---x---> 90
               | 
         -135  |  135
              180
              

预期方向

               90
          45   |    135
               | 
         0 <---x---> 180
               | 
         -45   |  -135
              -90
# Rotate by 90 degrees
angles = np.arctan2(x, y) + np.pi / 2

# Bring back into range -179..180
angles[angles > np.pi] -= 2 * np.pi

第一行的角度也发生了变化,但由于 x 和 y 都为 0,所以无论如何角度都没有正确定义,您需要决定在这种情况下要做什么。它可以像这样归零:

angles[(x==0) & (y==0)] = 0

然后像以前一样设置 Pandas 列:

df['Rotation'] = angles
df['Alpha'] = np.degrees(df['Rotation'])

                      Time id     x     y  Rotation  Alpha
0  2021-03-27 10:46:48.100  A  50.0  25.0  0.000000    0.0
1  2021-03-27 10:46:48.200  A  55.0  20.0 -2.356194 -135.0
2  2021-03-27 10:46:48.300  A  50.0  20.0  0.000000    0.0
3  2021-03-27 10:46:48.400  A  50.0  15.0 -1.570796  -90.0