如何在Pandas中合并同列DataFrame补全0犯罪年份数据?
解决方案:填充缺失的国家-年份犯罪数据
以下是可直接在Jupyter Notebook中运行的实现步骤:
1. 生成包含所有国家-年份组合的DataFrame(df2)
先定义你的国家列表和目标年份范围,通过笛卡尔积生成完整的组合:
import pandas as pd # 替换为你实际的18个国家列表 countries = ["国家1", "国家2", "国家3", ...] # 补充剩余国家 years = range(2000, 2021) # 覆盖2000-2020所有年份 # 生成全量国家-年份组合 df2 = pd.DataFrame( pd.MultiIndex.from_product([countries, years], names=["country", "year"]), columns=["country", "year"] )
2. 合并df1与df2并填充缺失值
使用merge做左连接,保留df2的所有行,将df1中的犯罪数据匹配进来,最后把缺失值替换为0:
# 左连接:保留df2的所有组合,匹配df1中的已有数据 # 确保df1的列名和df2一致(比如都是country和year),否则用left_on/right_on指定对应列 merged_df = df2.merge(df1, on=["country", "year"], how="left") # 将缺失的犯罪数替换为0 merged_df["crime_total"] = merged_df["crime_total"].fillna(0)
补充说明
- 如果df1的列名和df2不一致(比如df1中国家列叫
Country),修改merge语句:merged_df = df2.merge( df1, left_on=["country", "year"], right_on=["Country", "year"], how="left" ) # 删除重复的列(可选) merged_df = merged_df.drop("Country", axis=1) - 最终的
merged_df就是包含所有国家-年份、且缺失年份犯罪数为0的目标DataFrame。
内容的提问来源于stack exchange,提问作者taraamcl
相关产品推荐
相关产品推荐

