首页 > 解决方案 > 熊猫应用多列作为输入

问题描述

对于具有 4 列坐标(经度、纬度)的数据框,我想创建第 5 列,其中包含每列两个位置之间的距离,如下所示:

 dict = [{'x1': '1','y1': '1','x2': '3','y2': '2'},
 {'x1': '1','y1': '1','x2': '3','y2': '2'}]
 data = pd.DataFrame(dict)

作为结果,我希望有这个:

dict1 = [{'x1': '1','y1': '1','x2': '3','y2': '2','distance': '2.6'},
{'x1': '1','y1': '1','x2': '3','y2': '2','distance': '2.9'}]   
data2 = pd.DataFrame(dict)

使用 from geopy.distance import great_circle 计算距离的地方:

这是我尝试过的:

data['distance']=data[['x1','y1','x2','y2']].apply(lambda x1,y1,x2,y2: great_circle(x1,y1,x2,y2).英里,轴=1)

但这给了我一个类型错误:

TypeError: () 缺少 3 个必需的位置参数:“y1”、“x2”和“y2”

任何帮助表示赞赏。

标签: pythonpandasapply

解决方案


那是因为 lambda 函数只能查看操作数data[['x1','y1','x2','y2']],所以你应该修改它如下。希望这可以帮助!

data['distance']=data[['x1','y1','x2','y2']].apply(lambda df: great_circle(df['x1'],df['y1'],df['x2'],df['y2']).miles, axis=1)

推荐阅读