Применить функцию к каждой строке фрейма данных pandas

#python #pandas #function #dataframe #apply

#python #pandas #функция #фрейм данных #применить

Вопрос:

Как я могу применить point_rotation функцию к Coordinates1 , Coordinates2 столбцам в приведенном ниже фрейме данных:

 def point_rotation(point):
    """
    Changing axis
    """
    xcor, ycor = (700, 0)
    xcor1, ycor1 = (0, 0)
    xpoint, ypoint = point

    xnew = xpoint - xcor
    ynew = ypoint - ycor    
    xnew = xcor1   math.cos(math.radians(270)) * (xnew - xcor1) - math.sin(math.radians(90)) * (ynew - ycor1)
    ynew = ycor1   math.sin(math.radians(270)) * (xnew - xcor1)   math.cos(math.radians(90)) * (ynew - ycor1)
    return round(xnew, 0), round(ynew, 0)
  

Вот мой текущий фрейм данных:

 df = pd.DataFrame({'X_1': [-34.58, -15.78, -33.45, 4.60, 10.48],
                   'Y_1': [-58.66, -47.91, -70.66, -74.08, -66.86],
                   'X_2': [-3.58, -1.8, -3.5, 4.0, 1.48],
                   'Y_2': [-5.66, -4.1, -7.6, -7.8, -6.86]})

df['Coordinates1'] = list(zip(df.X_1, df.Y_1))
df['Coordinates2'] = list(zip(df.X_2, df.Y_2))
  

Требуемый результат: должен содержать столбцы Coordinates3 и Coordinates4 , которые в основном являются производными от point_rotation функции путем передачи столбцов Coordinates1 и Coordinates2 .

Я пытался использовать apply функцию, но она выдает мне ошибку: too many values to unpack (expected 2) .

Спасибо за помощь!

Комментарии:

1. привет. Что такое height_units . Кажется, что отсутствует определение.

2. Моя ошибка. Обновил его

Ответ №1:

Если вы используете понимание списка. Вашей новой точкой будет кортеж (аналогично тому, как вы определили Coordinates1 и Coordinates2 )

 df['Coordinates3'] = [point_rotation(point) for point in df['Coordinates1']]
  

apply похоже, тоже работает 🙂

 df['Coordinates4'] = df['Coordinates2'].apply(point_rotation)
  

Комментарии:

1. Спасибо, это работает! столбцы моего фрейма данных были отформатированы как строки, из-за чего он изначально не работал.

2. @KaushikN если это помогло вам, пожалуйста, подумайте о том, чтобы принять это, просто нажмите на серую галочку слева от ответа. Спасибо.

Ответ №2:

Просто сделайте

 df['Coordinates3'] = df['Coordinates1'].apply(point_rotation)
df['Coordinates4'] = df['Coordinates2'].apply(point_rotation)