Pandas中基于相同ID列匹配实现多列数值相乘的问题求解
问题解决实现方案
核心逻辑说明
你原有代码的匹配逻辑是对的,默认按公共列ID做内连接匹配,仅需要调整写法适配「生成新DataFrame」的需求,同时避免原写法可能出现的长度不匹配报错。
实现代码
方案1:仅保留双表共有的匹配ID(内连接)
适用于不需要保留未匹配ID的场景:
# 写法1:分步写更易读 # 按ID匹配,仅取需要参与计算的列避免冗余 result_df = df1[["ID", "number"]].merge(df2[["ID", "mult"]], on="ID") # 计算乘积列 result_df["soln"] = result_df["number"] * result_df["mult"] # 写法2:和你原有风格一致的链式写法 result_df = df1.merge(df2, on="ID").assign(soln=lambda df: df.number * df.mult)
方案2:保留df1全部ID(左连接)
适用于需要保留df1所有行,未匹配到df2的行乘积为空的场景:
result_df = df1.merge(df2[["ID", "mult"]], on="ID", how="left") result_df["soln"] = result_df["number"] * result_df["mult"]
注意事项
- 请提前确认df2的
ID列无重复值,否则单条df1行可能匹配多条df2行,导致结果行数超出预期 - 如果需要保留双表所有ID,可将merge的
how参数改为outer,未匹配行的乘积值为NaN
内容的提问来源于stack exchange,提问作者user286076
相关产品推荐
相关产品推荐

