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

Pandas merge匹配共同字段时产生大量重复行如何解决?

问题原因
  • 你当前仅用Country/Region作为合并键,但这个字段在两个数据集中存在大量重复值:同一国家/地区下会拆分多个省/州级别的行,比如中国、美国、加拿大等国家都对应多条记录。
  • pandas的merge默认是内连接,当左表某国存在m条记录、右表同国存在n条记录时,会生成m*n条笛卡尔积结果,所有匹配的行两两组合,最终总行数就会远大于279。
  • 你之前用isin校验只能证明所有国家名称都存在,没法检查同一个国家对应的行数是否匹配,所以没发现重复问题。
解决方法

方法1:保留省/州维度合并(推荐,符合数据集原始设计)

这个数据集的唯一键是Province/State + Country/Region的组合,你合并时加上这个键即可得到正确的279行结果:

# 提取数据时保留Province/State字段
confirmed_cases = confirmed_df[["Province/State", "Country/Region","Lat","Long"]]
death_cases = deaths_df[["Province/State", "Country/Region","8/8/21"]]

# 用两个字段共同作为合并键
all_info = pd.merge(confirmed_cases, death_cases, on=["Province/State", "Country/Region"])
print(all_info.shape) # 输出为(279, 5),符合预期

如果不需要保留Province/State字段,合并后再删除即可。

方法2:按国家维度聚合后合并

如果你只需要国家级别的汇总数据,可以先按Country/Region聚合,再进行合并:

# 左表按国家聚合,经纬度取均值,也可以根据需求调整聚合逻辑
confirmed_agg = confirmed_cases.groupby("Country/Region", as_index=False).agg({"Lat": "mean", "Long": "mean"})
# 右表按国家聚合,死亡数求和
death_agg = death_cases.groupby("Country/Region", as_index=False)["8/8/21"].sum()

# 合并聚合后的结果,行数和唯一国家数量一致
all_info = pd.merge(confirmed_agg, death_agg, on="Country/Region")

内容的提问来源于stack exchange,提问作者Hoàng Long

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:33:02