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

如何用Pandas GroupBy实现特定条件下的分组求和?

解决方法:按分组求和并过滤指定行

方法一:先过滤再分组求和(推荐,效率更高)

先筛选出y列值为m或n的行,再按x列分组对z列求和,是最直接且高效的方式——提前剔除无关行,减少分组计算的数据量:

import pandas as pd

df = pd.DataFrame({
    'x': ['A', 'A', 'E' ,'B', 'B', 'C', 'C'],
    'y': ['m', 'n', 'q', 'm', 'n', 'm', 'n'],
    'z':  [6,   5,  10,   4,   3,    2,   1]
})

# 过滤y列仅包含'm'/'n'的行
filtered_df = df[df['y'].isin(['m', 'n'])]
# 按x分组求和,重置索引并重命名求和列
result = filtered_df.groupby('x')['z'].sum().reset_index(name='sum')

print(result)

执行后输出:

x  sum
0  A   11
1  B    7
2  C    3

方法二:分组内过滤(适合特殊场景)

如果需要在分组逻辑中直接过滤(比如部分分组混合了有效/无效行),可以用groupby.filter先剔除包含无效y值的分组,再求和:

# 先过滤掉包含y≠'m'/'n'的分组,再求和
result = (df.groupby('x')
          .filter(lambda group: group['y'].isin(['m', 'n']).all())
          .groupby('x')['z']
          .sum()
          .reset_index(name='sum'))

print(result)

方法对比

  • 方法一的性能更优,因为提前过滤减少了分组处理的数据量,适合大数据集;
  • 方法二适合需要对分组整体做有效性判断的场景,但会多一次分组操作,数据量大时效率较低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:12:15