我有以下 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
),如果它有帮助的话。
1条答案
按热度按时间vltsax251#
PS:我还有4个其他列的点坐标是浮点数,而不是字符串(Xcoord_point1,Ycoord_point1,Xcoord_point2,Ycoord_point2),如果有帮助的话。
这很有用-使用NumPy: