【发布时间】:2020-03-09 17:51:50
【问题描述】:
我有两个不同大小的数据框 A(236 x 4) 和 B(967 x 4)。我想使用一个嵌套循环遍历两个数据帧的行,该循环接受两个 FIPS 列的输入,如果它们相等,我希望它们吐出一个半正弦距离。
一个数据框的头部是这样的,
AddressClinic CountyClinicFIPS Lat Lon\
0 9137 ST.RT. 136, WEST UNION, OH, 45693 1.0 -83.60553 38.809795
1 940 N. Cable Rd., Lima, OH, 45805 3.0 -84.14703 40.755620
2 934 Center St. Ste E, Ashland, OH, 44805 5.0 -82.31091 40.859657
3 934 Center ST Ste. E, Ashland, OH, 44805 5.0 -82.31091 40.859657
4 3225 Lake Avenue, Ashtabula, OH, 44004 7.0 -80.79042 41.876133
另一个数据帧格式完全相同,不同地址信息格式相同。
InputAddr CountyRetailerFIPS Lat Lon\
0 16782 ST RT 125, WEST UNION, OH, 45693 1 -83.41653 38.771553
1 156 NORTH MAIN ST, PEEBLES, OH, 45660 1 -83.40529 38.949960
2 18811 SR 136 , WINCHESTER, OH, 45697 1 -83.65418 38.937350
3 2100 HARDING HIGHWAY #12, LIMA, OH, 45804 3 -84.06680 40.730656
4 1102 ELIDA AVE, DELPHOS, OH, 45833 3 -84.32622 40.842110
我一直在尝试的代码是一个看起来像这样的almagmation
import pandas as pd
import numpy as np
from numpy import cos, sin, arcsin, sqrt
from math import radians
dataclinic=pd.read_csv(r"C:\Users\Jack\Documents\Schoolwork\WICResearch\MyDocs\getdistanceclinic.csv")
dataretailer=pd.read_csv(r"C:\Users\Jack\Documents\Schoolwork\WICResearch\MyDocs\getdistanceretailer.csv")
datadistance = pd.DataFrame([])
def haversine(row):
lon1 = row1['Lon']
lat1 = row1['Lat']
lon2 = row2['Lon']
lat2 = row2['Lat']
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * arcsin(sqrt(a))
km = 6367 * c
return km
for index1, row1 in dataclinic.iterrows():
for index2, row2 in dataretailer.iterrows():
if row1['CountyClinicFIPS'] == row2['CountyRetailerFIPS']:
datadistance = datadistance.apply(lambda row: haversine(row), axis=1)
else:
continue
print(datadistance)
不出所料,它不起作用。它有一些作用,但不多。它返回 datadistance 作为 (0,) index1,2 as int 235,966 row1,2 作为系列值 (4,) 的系列对象,它们都是数据帧第一行的元素。
预期的结果是使用 ClinicFips = RetailerFips 的所有案例填充 datadistance,并计算并列出两者之间的距离,以便更容易地在县之间进行平均。
也许我以错误的方式解决这个问题。任何意见是极大的赞赏。谢谢。
【问题讨论】:
标签: python pandas loops iteration haversine