You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:15:31