pandas 将math.dist()快速应用于panda Dataframe

abithluo  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(112)

我有以下 Dataframe (df):

Name            Point1                  Point2
name1     '[x_coord, y_coord]'     '[x_coord, y_coord]'
name2     '[x_coord, y_coord]'     '[x_coord, y_coord]'
name3     '[x_coord, y_coord]'     '[x_coord, y_coord]'
etc...

我想添加一个新列“距离”,将以下内容应用于所有行:math.dist(ast.literal_eval(df['Point1']), ast.literal_eval(df['Point2'])) .
然而,这并不奏效:

df['Distance'] = math.dist(ast.literal_eval(df['Point1']), ast.literal_eval(df['Point2']))

下面的循环是有效的,但是它花费的时间太长了,因为我有数百万行:

dist_list = [math.dist(ast.literal_eval(row[2]), ast.literal_eval(row[3])) for row in df.itertuples()]

我在这里寻找的是一次对所有行执行此操作的方法,因为循环花费的时间太长。类似于如果我们想将所有行乘以整数'n',不需要循环,只需执行df['new_col'] = df['old_col'] * n
我尝试的另一件事也花了很长时间,那就是创建一个函数并使用apply和lambda调用,就像这样:

def get_dist(p1: str, p2: str):
    return math.dist(ast.literal_eval(p1), ast.literal_eval(p2))

df['Distance'] = df.apply(lambda x: get_dist(x['Point1'], x['Point2']), axis=1)

有没有更快的方法可以得到我想要的结果?
先谢了!
PS:我还有另外4列的点坐标是浮点数,而不是字符串(Xcoord_point1, Ycoord_point1, Xcoord_point2, Ycoord_point2),如果它有帮助的话。

vltsax25

vltsax251#

PS:我还有4个其他列的点坐标是浮点数,而不是字符串(Xcoord_point1,Ycoord_point1,Xcoord_point2,Ycoord_point2),如果有帮助的话。
这很有用-使用NumPy:

import numpy as np

df["Distance"] = np.sqrt(
    (df["Xcoord_point1"].values - df["Xcoord_point2"].values) ** 2
    + (df["Ycoord_point1"].values - df["Ycoord_point2"].values) ** 2
)

相关问题