如何将pandas指定列映射到不同的DataFrame中
pandas 按地点匹配经纬度字段实现方法
你可以通过以下两种简单方式实现需求,两种方法都基于「同一地点对应固定经纬度」的前提,和示例数据逻辑完全匹配。
原始示例数据
首先复现测试用的两个DataFrame:
import pandas as pd df1 = pd.DataFrame({ 'place': ["London", "Paris", "Berlin", "London", "Berlin"], 'sale': [12, 6, 4, 3, 14], 'lat': [54, 23, 13, 54, 13], 'lon': [13, 32, 64, 13, 64], }) df2 = pd.DataFrame({ 'place': ["London", "Paris", "Berlin"], 'sale_sum': [15, 6, 18], })
方法1:去重后合并(推荐,通用性强)
先从原始表中提取每个地点唯一对应的经纬度,再通过merge关联到聚合结果表,是最稳妥的实现方式:
# 提取地点-经纬度的唯一对应关系,剔除重复记录 place_coord_mapping = df1[['place', 'lat', 'lon']].drop_duplicates() # 按place字段左连接,保留df2的所有聚合结果 final_df = df2.merge(place_coord_mapping, on='place', how='left')
执行后final_df输出如下,完全符合预期结果:
place sale_sum lat lon 0 London 15 54 13 1 Paris 6 23 32 2 Berlin 18 13 64
方法2:字典映射赋值(适合少量字段场景)
如果需要追加的字段不多,可以直接构造映射字典给df2新增列,代码更简洁:
# 生成地点到经纬度的映射字典 lat_dict = df1.drop_duplicates('place').set_index('place')['lat'].to_dict() lon_dict = df1.drop_duplicates('place').set_index('place')['lon'].to_dict() # 直接为df2追加经纬度列 df2['lat'] = df2['place'].map(lat_dict) df2['lon'] = df2['place'].map(lon_dict)
执行后df2会直接更新为目标结果表,无需额外赋值新变量。
注意:如果原始数据中存在同一个地点对应多组不同经纬度的异常值,需要先清洗数据再做关联,否则会出现合并后行数超出预期的问题。
内容的提问来源于stack exchange,提问作者PParker
相关产品推荐
相关产品推荐

