熊猫应用多列作为输入

时间:2020-03-21 22:22:22

标签: python pandas apply

对于一个具有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”

感谢您的帮助。

1 个答案:

答案 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)