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

Python Pandas实现类Excel SUMIF功能:更优雅高效的替代方法

更优雅高效的实现方法

这里推荐两种简洁高效的方式,避免繁琐的合并操作:

方法1:groupby + map(最简洁直接)

先计算第二个DataFrame中每个名称对应的Z列求和结果,再通过映射直接填充到第一个DataFrame的C列:

import pandas as pd

# 初始化示例数据
df1 = pd.DataFrame({'A': [1,2,3], 'B': ['John','Mike','David'], 'C': [None, None, None]})
df2 = pd.DataFrame({'X': [1,2,3,4,5], 'Y': ['Mike','Mike','John','David','David'], 'z': [100,200,300,400,500]})

# 计算每个Y对应的z列总和
name_sum = df2.groupby('Y')['z'].sum()

# 映射填充C列
df1['C'] = df1['B'].map(name_sum)

运行后df1就会得到你想要的结果。这种方式无需合并操作,直接通过列值映射完成赋值,代码更简洁,逻辑清晰,且对于大数据集的效率优于合并(避免了合并时的索引对齐开销)。

如果需要处理df1中存在df2没有的名称的情况,可以保留原C列值:

df1['C'] = df1['B'].map(name_sum).fillna(df1['C'])

方法2:transform 配合合并(可选)

如果偏好使用合并逻辑,也可以用transform提前在df2中生成求和列,再做合并(比先分组再合并更紧凑):

# 给df2添加每个Y对应的求和列
df2['sum_z'] = df2.groupby('Y')['z'].transform('sum')

# 合并后去重并赋值
df1 = df1.merge(df2[['Y','sum_z']].drop_duplicates(), left_on='B', right_on='Y', how='left').drop('Y', axis=1).rename(columns={'sum_z':'C'})

不过这种方式不如第一种简洁,更适合需要保留df2其他信息的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:22:50