给出熊猫DataFrame:
import pandas as pd
import numpy as np
points = [[True, False, False, 2, 4, 5, 0, 6, 8, 9, 3, 9],
[False, True, False, 3, 6, 2, 8, 9, 3, 2, 3, 0],
[False, False, True, 8, 1, 8, 3, 6, 8, 9, 3, 2]]
df = pd.DataFrame(points, columns= ['1isObj','2isObj','3isOb',
'X_1','X_2','X_3','Y_1','Y_2','Y_3','S_1','S_2','S_3'])
print(df)
1isObj 2isObj 3isOb X_1 X_2 X_3 Y_1 Y_2 Y_3 S_1 S_2 S_3
0 True False False 2 4 5 0 6 8 9 3 9
1 False True False 3 6 2 8 9 3 2 3 0
2 False False True 8 1 8 3 6 8 9 3 2
每行包含3点x,y顶点和其速度。每个点只有一排是目标。 我需要找到让其他观点达到目标的最快时间。
对于第0行: 点1是目标,它在(2,0)处,是找到我们首先必须使用距离公式找到2到1以及3到距离的时间:
time_2 = np.sqrt(np.square(df['X_2']-df['X_1'])+np.square(df['Y_2']-df['Y_1']))/df['S_2']
查找2到达1所需的时间。我们对3和1进行相同的操作,并将最小值作为'MinTime'
对于第1行,它将找到介于1到2和3到2之间的时间。
对所有行执行此操作,然后将其与原始数据帧一起返回。
def min_time(df):
df['MinTime'] = #Some Operation
return df
如何做到这一点而又不涉及遍历所有行的For循环,这是非常低效的? 我正在处理超过10万行,目标点可以在行与行之间更改。
答案 0 :(得分:0)
您可以在数据框中创建新列,然后按行获取这些列中的最小值
df['time_2'] = np.sqrt(np.square(df['X_2']-df['X_1'])+np.square(df['Y_2']-df['Y_1']))/df['S_2']
df['time_3']= np.sqrt(np.square(df['X_3']-df['X_1'])+np.square(df['Y_3']-df['Y_1']))/df['S_3']
# Get the min between 'time_2' and 'time_3' for each row
df['MinTime'] = df[['time_2','time_3']].min(axis=1)