Рассчитайте построчное произведение точек на основе предыдущего ряда и следующего ряда в пандах - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть кадр данных для панд, как показано ниже:

     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 - Координаты (1260.0, 1910.0).) для индекса 28 c то же самое для индекса 6 (т. е. (1030.0, 2070.0)).Рассчитанный продукт для строки 2. Таким образом, я должен получить предыдущее значение строки и следующее значение тоже.Таким образом, я должен рассчитать для всей «Координаты», я совсем новичок в пандах, следовательно, все еще на пути обучения.Пожалуйста, ведите меня немного.

Большое спасибо за помощь.

1 Ответ

0 голосов
/ 13 сентября 2018

Я предполагаю, что ваши элементы столбца '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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...