如何解决为什么此python函数返回重复列表?
我正在尝试编写一个代码块,该代码块作用于两组地理坐标(在这种情况下为邻里和暴力犯罪)。它计算每个街区500m半径内的犯罪数量,将这些数字添加到列表中,然后将该列表与街区数据集合并。
#For each neighbourhood in city find all crimes committed within a 500m radius
from geopy import distance
def Crime_in_Hood(crimes):
#counts number of crimes in 500m radius of neighbourhood
crime_count = 0
for index,crime in crimes.iterrows():
test_point = [{crime['Latitude'],crime['Longitude']}]
radius = 0.5# in km
center_point_tuple = tuple(center_point)
test_point_tuple = tuple(test_point)
dis = distance.distance(center_point_tuple,test_point_tuple).km
if dis <= radius:
crime_count = crime_count + 1
return crime_count
def Crime_in_City(crimes,hoods):
#returns number of crimes for each neighbourhood in city
#instantiate crime tally
violent_crimes = []
for index,hood in hoods.iterrows():
center_point = [{hood['Latitude'],hood['Longitude']}]
crime_count = Crime_in_Hood(crimes,hoods)
violent_crimes.append(crime_count)
return violent_crimes
def Crime_Counter(crimes,hoods):
#Add the number of crimes committed to dataframe for each neighbourhood in city
violent_crimes = Crime_in_City(crimes,hoods)
#Add violent_crimes to hoods
hoods["Violent Crimes"] = violent_crimes
return hoods
ny_hoods = Crime_Counter(ny_c,ny_hoods)
ny_hoods.head()
问题是它返回一个数据框,其中“暴力犯罪”列中的每个值都相同。
我用不同的值测试了Crime_in_Hood函数,它可以按预期工作。但是,Crime_in_City返回一个列表,该列表的最后一个Crime_count值会一遍又一遍地重复。所以现在我的问题就在这里,而不是如何解决。据我所知,Crime_in_Hood应该为Crime_in_City的每次迭代返回不同的值,并将其附加到violent_crimes,但这不是。
有什么想法吗?
解决方法
Crime_in_Hood(crimes)仅具有一个已定义的参数,但是您在此处使用2个参数来调用它:Crime_count = Crime_in_Hood(crimes,敞篷)。这就是您的代码的外观(如下)。 ny_c和ny_hoods都应该是带有float64值的“纬度”和“经度”列的pandas DataFrame。除此之外,我不确定在以下方面有关geopy的工作方式:{Latitude,Longitude}表示法。
#For each neighbourhood in city find all crimes committed within a 500m radius
from geopy import distance
def Crime_in_Hood(crimes,center_point):
#counts number of crimes in 500m radius of neighbourhood
crime_count = 0
for index,crime in crimes.iterrows():
test_point = [{crime['Latitude'],crime['Longitude']}]
radius = 0.5# in km
center_point_tuple = tuple(center_point)
test_point_tuple = tuple(test_point)
dis = distance.distance(center_point_tuple,test_point_tuple).km
if dis <= radius:
crime_count = crime_count + 1
return crime_count
def Crime_in_City(crimes,hoods):
#returns number of crimes for each neighbourhood in city
#instantiate crime tally
violent_crimes = []
for index,hood in hoods.iterrows():
center_point = [{hood['Latitude'],hood['Longitude']}]
crime_count = Crime_in_Hood(crimes,center_point)
violent_crimes.append(crime_count)
return violent_crimes
def Crime_Counter(crimes,hoods):
#Add the number of crimes committed to dataframe for each neighbourhood in city
violent_crimes = Crime_in_City(crimes,hoods)
#Add violent_crimes to hoods
hoods["Violent Crimes"] = violent_crimes
return hoods
ny_hoods = Crime_Counter(ny_c,ny_hoods)
ny_hoods.head()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。