我有一个如下所示的熊猫数据框:
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行的。因此,在某种程度上,我也必须获取上一行的值和下一个值。这样,我必须为整个“坐标”计算出我对熊猫还很陌生,因此仍在学习中。请给我一点指导。
非常感谢您的帮助。
答案 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