dataframe1 有2列信息info经纬度dataframe2 有3列信息 小区名info经纬度从dataframe2 中匹配同频同PCI 最近的距离的小区名到dataframe1
假设dataframe1的列名为:info、latitude、longitude;dataframe2的列名为:cell_name、info、latitude、longitude、PCI。
首先,我们需要根据同频同PCI进行筛选,可以使用pandas的merge函数:
merge_df = pd.merge(dataframe1, dataframe2[dataframe2['PCI'] == pci_value], on='info')
其中,pci_value为同频同PCI的PCI值。上述操作会将两个DataFrame根据info列进行合并,并只保留PCI值为pci_value的行。
接下来,我们需要求解距离。可以使用geopy库中的distance函数:
from geopy.distance import distance
distance_list = []
for i in range(len(merge_df)):
distance_list.append(distance((merge_df['latitude_x'][i], merge_df['longitude_x'][i]), (merge_df['latitude_y'][i], merge_df['longitude_y'][i])).meters)
merge_df['distance'] = distance_list
上述代码会将dataframe1和筛选后的dataframe2中每一行的经纬度信息提取出来,并计算它们之间的距离,将距离存储在distance列中。
最后,我们可以使用pandas的groupby和agg函数,对每个info进行分组,并取出距离最小的那个小区名:
result_df = merge_df.groupby('info').agg({'distance': 'min', 'cell_name': 'first'})
result_df = result_df.reset_index()
result_df = result_df[['info', 'cell_name']]
上述代码会先按照info列进行分组,然后对每组中的distance列取最小值,对每组中的cell_name列取第一个值(即距离最小的那个小区名),最后将结果存储在result_df中
原文地址: https://www.cveoy.top/t/topic/en8N 著作权归作者所有。请勿转载和采集!