我有一个名为
一个名为
player
的DataFrame:player_df = pd.DataFrame(np.random.rand(10,3), columns=['x','y','more_cols'])
_____________________________________________________________________________
player_df:
x y more_cols
0 0.352673 0.479360 0.638508
1 0.764669 0.326961 0.778483
2 0.805774 0.911662 0.316030
3 0.114446 0.185147 0.318742
4 0.714803 0.646525 0.084143
5 0.061614 0.837432 0.886669
6 0.179777 0.519559 0.446562
7 0.615326 0.886046 0.581127
8 0.597375 0.196619 0.310331
9 0.670061 0.471363 0.313047
一个名为
checkpoints_df
的第二个数据帧:checkpoints_df = pd.DataFrame(np.random.rand(4,2), columns=['x','y'])
checkpoints_df['checkpoint_name'] = ['Alpha', 'Hotel', 'Indigo', 'Papa']
_____________________________________________________________________________
checkpoints_df:
x y checkpoint_names
0 0.616945 0.804442 Alpha
1 0.402007 0.556274 Hotel
2 0.478351 0.443920 Indigo
3 0.075494 0.803561 Papa
以编程为相关内容,函数 distance(x1,y1,x2,y2)
可以计算 2 点之间的欧几里得距离或点列表和一个点的距离(x1 和 y1 可以是列表)。
目标:我想为“checkpoints_df['checkpoint_name']”中的每个检查点名称添加“player_df”的列,并用玩家与该检查点的距离填充该列(这是一个模拟问题,真实的问题可能有很多“检查点”)
到目前为止,我尝试了很多方法,但最终选择了使用.iterrows()
的解决方案,但如果有很多检查点,则可能会变慢。 这就是我现在使用的:
for _, row in checkpoints_df.iterrows():
player_df[row['name']] = distance(player_df['x'], player_df['y'], row['x'], row['y'])
我尝试使用.apply()
,但无法创建列。有没有一种方法可以在不迭代第二个数据框的情况下完成这个任务?
iterrows
是被不赞同的方法 ;) - mozway