【问题标题】:Apply function on every row of a pandas dataframe对 pandas 数据框的每一行应用函数
【发布时间】:2019-03-13 15:36:15
【问题描述】:

如何在以下数据框中的 Coordinates1Coordinates2 列上应用函数 point_rotation 函数:

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

需要的输出:应该有列 Coordinates3Coordinates4,它们基本上是通过传递列 Coordinates1Coordinates2point_rotation 函数派生的。

我尝试使用apply 函数,但它给我一个错误:too many values to unpack (expected 2)

感谢您的帮助!

【问题讨论】:

  • 嗨。什么是height_units。似乎缺少定义。
  • 我的错。更新了

标签: python pandas function dataframe apply


【解决方案1】:

如果你使用列表推导。您的新点将是一个元组(类似于您定义 Coordinates1Coordinates2 的方式)

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

apply 似乎也可以工作:)

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

【讨论】:

  • 感谢这项工作!我的数据框列被格式化为字符串,因为它最初不起作用。
  • @KaushikN 如果对您有帮助,请考虑accepting 它,只需单击答案左侧的灰色勾号。谢谢。
【解决方案2】:

做事

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

【讨论】:

    猜你喜欢
    • 2015-07-29
    • 2018-10-29
    • 1970-01-01
    • 2016-08-05
    • 2019-03-13
    • 1970-01-01
    • 2019-11-26
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多