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

如何实现两个DataFrame匹配合并 插入经纬度列用于地图可视化

巴基斯坦选举数据经纬度匹配操作步骤

你现在的核心问题是两个数据集没有统一的关联键,且字段值存在格式、拼写不一致的问题,按以下步骤处理即可拿到可用于地图可视化的数据集:

1 清洗关联字段,统一匹配规则

两个数据集靠城市/地区名关联,必须先做标准化,否则会出现大量匹配失败的情况:

  • 把经纬度数据集df1的city列、选举数据集election_df2的District列所有值统一转为小写,去掉首尾空格、特殊字符
  • 修正字段值的拼写错误,比如样例里选举数据集里卡拉奇的拼写是Karchi,和经纬度数据集里的karachi不一致,必须提前修正,所有拼写错的地区名都要整理成替换字典统一处理
  • 参考代码:
import pandas as pd

# 清洗经纬度表的城市字段
df1["city_match"] = df1["city"].str.strip().str.lower()

# 清洗选举表的地区字段
election_df2["district_match"] = election_df2["District"].str.strip().str.lower()
# 修正拼写错误,实际使用时把所有错拼的地区补到字典里
spell_correction = {"karchi": "karachi"}
election_df2["district_match"] = election_df2["district_match"].replace(spell_correction)

2 聚合得到每个选区的胜选政党

你需要展示的是各选区占比最高的政党,不要直接用候选人维度的原始数据合并,先做聚合:

  • 按选区名称ConstituencyTitle分组,取每个组里得票数Votes最高的记录,就是该选区的胜选方
  • 参考代码:
# 按得票降序排序,每个选区取第一条即为最高票候选人/政党
winner_df = election_df2.sort_values("Votes", ascending=False)\
    .groupby("ConstituencyTitle", as_index=False).first()

3 关联合并两个数据集

用清洗好的匹配字段做左连接,把经纬度信息挂到胜选数据上:

# 左连接保留所有选区的胜选数据,匹配对应经纬度
final_for_map = pd.merge(
    left=winner_df,
    right=df1[["city_match", "lat", "lon"]],
    left_on="district_match",
    right_on="city_match",
    how="left"
)

# 一定要检查匹配结果,统计没匹配到经纬度的行,手动补全缺失的经纬度
print(f"未匹配到经纬度的选区共 {final_for_map['lat'].isna().sum()} 个")

4 可视化注意事项

拿到final_for_map表之后就可以直接做地图打点可视化,按Party字段给不同政党分配不同颜色即可:

  • 如果同一个城市对应多个选区,同经纬度的点会重叠,可以给同城市的点加微小的经纬度偏移,避免点叠在一起看不清
  • 如果要做更精准的选区填色图,可以替换成巴基斯坦选区边界的GeoJSON文件,按选区名称关联数据做面渲染,效果比打点更准确。

内容的提问来源于stack exchange,提问作者Abdul Wahab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:42:19