计算熊猫数据框中的角度

时间:2018-09-19 19:00:40

标签: python pandas

我有以下pandas.DataFrame

       City x-Coord  City y-Coord                     coord
12860    59333.3333    18050.0000       (59333.3333+18050j)   
12941    59350.0000    18050.0000            (59350+18050j)   
13035    59366.6667    18050.0000       (59366.6667+18050j)   
12940    59350.0000    18033.3333       (59350+18033.3333j)   
13034    59366.6667    18016.6667  (59366.6667+18016.6667j)   
13033    59366.6667    18000.0000       (59366.6667+18000j)   
13132    59383.3333    18000.0000       (59383.3333+18000j)   
13133    59383.3333    18016.6667  (59383.3333+18016.6667j)   
13134    59383.3333    18033.3333  (59383.3333+18033.3333j)   
13230    59400.0000    18033.3333       (59400+18033.3333j)

现在,要计算城市1(x),2(y)和3(z)之间的角度:

arccos(np.dot((x-y),(z-y))/(abs(x-y)*abs(z-y))

所以,我的计算方式是:

df['combined'] = list(zip(df['City x-Coord'], df['City y-Coord']))
df['combined'] = df['combined'].apply(np.array)
a = df['combined'] - df['combined'].shift(1)
b = df['combined'] - df['combined'].shift(-1)
df['angle'] = [np.degrees(np.arccos(np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y)))).round().astype(int) for
               x, y in zip(a, b)]

但是,我的角度不正确。

df.head()   

出[5]:

       City x-Coord  City y-Coord                     coord  \
12860    59333.3333    18050.0000       (59333.3333+18050j)   
12941    59350.0000    18050.0000            (59350+18050j)   
13035    59366.6667    18050.0000       (59366.6667+18050j)   
12940    59350.0000    18033.3333       (59350+18033.3333j)   
13034    59366.6667    18016.6667  (59366.6667+18016.6667j)   
                       combined       angle  
12860     [59333.3333, 18050.0] -2147483648  
12941        [59350.0, 18050.0]         180  
13035     [59366.6667, 18050.0]          45  
12940     [59350.0, 18033.3333]          90  
13034  [59366.6667, 18016.6667]         135

此外,由于NaN值,最后一个值也是错误的。

df.tail()   

出[6]:

       City x-Coord  City y-Coord                     coord  \
12677    59300.0000    18100.0000            (59300+18100j)   
12761    59316.6667    18083.3333  (59316.6667+18083.3333j)   
12863    59333.3333    18100.0000       (59333.3333+18100j)   
12862    59333.3333    18083.3333  (59333.3333+18083.3333j)   
12861    59333.3333    18066.6667  (59333.3333+18066.6667j)   
                       combined       angle  
12677        [59300.0, 18100.0]         135  
12761  [59316.6667, 18083.3333]          90  
12863     [59333.3333, 18100.0]          45  
12862  [59333.3333, 18083.3333]         180  
12861  [59333.3333, 18066.6667] -2147483648  

我能理解的第一个和最后一个条目是Nan值。我可以更改dict理解来解决此问题吗?另外,我的计算正确吗?不确定。有人可以再说一遍吗?

谢谢, Arnab

0 个答案:

没有答案