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

Pandas按County列合并DataFrame行数暴涨及坐标列生成方案

问题原因

执行默认merge合并后行数暴涨,核心原因是cnty表的County列存在重复县域名称,合并时触发一对多笛卡尔积匹配,把所有同名县的记录都和df的对应行做了关联,最终行数远超出原df的3221行。

实现方案

1. 格式预处理(推荐)

先统一两个表County列的格式,去除首尾多余空格,避免因隐形格式问题导致匹配失败:

df['County'] = df['County'].str.strip()
cnty['County'] = cnty['County'].str.strip()

2. 经纬度表去重

对cnty表按County列去重,保证每个县域仅保留唯一一条经纬度记录,从根源避免一对多匹配导致的行数扩增:

cnty_dedup = cnty.drop_duplicates(subset='County', keep='first')

3. 左连接匹配

使用左连接规则,以原df为左表做关联,全程保留df原有3221行数据不变:

df = pd.merge(
    df,
    cnty_dedup[['County', 'lat', 'lng']],
    on='County',
    how='left'
)

4. 生成指定格式坐标列

按照要求构造map_cordinates列:

df['map_cordinates'] = df.apply(
    lambda x: {"type": "Point", "coordinates": [[x['lat']], [x['lng']]]},
    axis=1
)
结果校验
  • 合并完成后执行print(len(df)),输出结果应为3221,和原df行数完全一致
  • 若存在经纬度为空的记录,可执行print(df[df['lat'].isna()]['County'].tolist())查看未匹配成功的县域,排查是否存在名称拼写不一致问题
  • 若不需要单独保留lat、lng列,可执行df = df.drop(columns=['lat', 'lng'])删除冗余列

内容的提问来源于stack exchange,提问作者Lalit Joshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:24:25