如何在pandas中对两个dataframe执行类似V-lookup的匹配操作
操作指引
第一步:完成DF2的聚合
按两个匹配列(Ethnicity、Region)同时分组求和,得到每个匹配组合对应的唯一总人口值,示例代码:
# 按两个匹配列分组,对Population求和 df2_agg = df2.groupby(['Ethnicity', 'Region'], as_index=False)['Population'].sum()
其中as_index=False参数可以让分组后的Ethnicity和Region保持为普通列,避免变成索引影响后续合并。
第二步:执行左连接合并
使用pandas的merge方法实现类VLOOKUP的匹配效果,保留DF1的所有行,匹配到的人口数据会自动填充到对应行:
# 左连接合并两个表 df1_final = pd.merge( left=df1, right=df2_agg, on=['Ethnicity', 'Region'], # 指定两个共同匹配列 how='left' # 左连接,完全保留DF1的所有行 )
合并后DF1原有所有业务数据都会完整保留,仅新增Population列存储匹配到的人口数值,同一个Ethnicity+Region组合不管在DF1中出现多少次,都会自动填充对应聚合后的总人口值。
可选操作:处理空值
如果DF1中存在DF2没有的Ethnicity+Region组合,合并后对应的Population列会生成NaN空值,你可以根据需求填充默认值,比如填充为0:
df1_final['Population'] = df1_final['Population'].fillna(0)
内容的提问来源于stack exchange,提问作者Jimmy K
相关产品推荐
相关产品推荐

