根据熊猫的上一行和下一行计算逐行点积

时间:2018-09-13 10:15:37

标签: python pandas numpy dataframe

我有一个如下所示的熊猫数据框:

     Coordinate
1   (1150.0,1760.0)
28  (1260.0,1910.0)
6   (1030.0,2070.0)
12  (1170.0,2300.0)
9   (790.0,2260.0)
5   (750.0,2030.0)
26  (490.0,2130.0)
29  (360.0,1980.0)
3   (40.0,2090.0)
2   (630.0,1660.0)
20  (590.0,1390.0)

现在,我想通过应用公式来创建新列“ dotProduct” np.dot((b-a),(b-c)),其中b是索引28的坐标(1260.0,1910.0),c是索引6的坐标(即(1030.0,2070.0))。计算出的乘积是针对第2行的。因此,在某种程度上,我也必须获取上一行的值和下一个值。这样,我必须为整个“坐标”计算出我对熊猫还很陌生,因此仍在学习中。请给我一点指导。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我假设您的'Coordinate'列元素已经是浮点值的元组。

# Convert elements of 'Coordinate' into numpy array
df.Coordinate = df.Coordinate.apply(np.array)

# Subtract +/- 1 shifted values from original 'Coordinate'
a = df.Coordinate - df.Coordinate.shift(1)
b = df.Coordinate - df.Coordinate.shift(-1)

# take row-wise dot product based on the arrays a, b
df['dotProduct'] = [np.dot(x, y) for x, y in zip(a, b)]

# make 'Coordinate' tuple again (if you want)
df.Coordinate = df.Coordinate.apply(tuple)

现在我得到的是df

             Coordinate  dotProduct

1      (1150.0, 1760.0)         NaN
28     (1260.0, 1910.0)      1300.0
6      (1030.0, 2070.0)     -4600.0
12     (1170.0, 2300.0)     62400.0
9       (790.0, 2260.0)    -24400.0
5       (750.0, 2030.0)     12600.0
26      (490.0, 2130.0)    -18800.0
29      (360.0, 1980.0)    -25100.0
3        (40.0, 2090.0)    236100.0
2       (630.0, 1660.0)    -92500.0
20      (590.0, 1390.0)         NaN