#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)