对于一个具有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)
其中距离是使用geopy.distance import great_circle计算的:
这是我尝试过的:
data ['distance'] = data [['x1','y1','x2','y2']]。apply(lambda x1,y1,x2,y2:great_circle(x1,y1,x2, y2).miles,axis = 1)
但是这给了我一个类型错误:
TypeError:()缺少3个必需的位置参数:“ y1”,“ x2”和“ y2”
感谢您的帮助。
答案 0 :(得分:1)
这是因为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)