Python 如何为多列应用函数?
我需要计算熊猫数据帧中两个邮政编码之间的距离 我正在使用pgeocode库计算2个英国邮政编码之间的距离Python 如何为多列应用函数?,python,pandas,apply,Python,Pandas,Apply,我需要计算熊猫数据帧中两个邮政编码之间的距离 我正在使用pgeocode库计算2个英国邮政编码之间的距离 dist=samp.apply(lambda x:dist.query\u邮政编码(x['a'],x['b']),axis=1)- 它不起作用(未正确调用DataFrame构造函数!)错误您需要参考数据库中的列名,以访问underyling值 换成 dist=samp.apply(lambda x:dist.query\u邮政编码(x['Postcode.x'],x['Postcode.y
dist=samp.apply(lambda x:dist.query\u邮政编码(x['a'],x['b']),axis=1)
-
它不起作用(未正确调用DataFrame构造函数!)错误您需要参考数据库中的
列名
,以访问underyling值
换成
dist=samp.apply(lambda x:dist.query\u邮政编码(x['Postcode.x'],x['Postcode.y']),axis=1)
一切都在你的准备中
- 从webservice获取地理数据
- 将其准备为元组并生成组合
- 计算距离
很好,正是我需要的。谢谢你,罗布
import geopy.distance, requests
import pandas as pd
# a few post codes..
df = pd.DataFrame({'Name': ['BROAD STREET DENTAL SURGERY',
'KINGTON SURGERY',
'ALTON STREET SURGERY'],
'PostCode': ['HR4 9AR', 'HR5 3EA', 'HR9 5AB']})
# get geo data for postcodes
dfgeo = (pd.json_normalize(requests.post("http://api.postcodes.io/postcodes",
json={"postcodes":df.PostCode.unique().tolist()}).json()["result"])
# make long / lat a tuple
.assign(geo=lambda d: d.loc[:,["result.longitude","result.latitude"]].apply(lambda r: tuple(r), axis=1))
.loc[:,["result.postcode","geo"]]
.rename(columns={"result.postcode":"PostCode"})
)
# merge geo data with original postcode data
df = df.merge(dfgeo, on="PostCode")
# generate all combinations, remove to self...
dfd = (df.assign(foo=1).merge(df.assign(foo=1), on="foo", suffixes=("_addr1","_addr2"))
.drop(columns=["foo"]).loc[lambda d: d.PostCode_addr1!=d.PostCode_addr2]
# all prep done, let's calc distance
.assign(miles=lambda d: d.apply(lambda r: geopy.distance.distance(r["geo_addr1"], r["geo_addr2"]).miles, axis=1))
)