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

Pandas中满足条件后按分组统计指定列求和的实现问题

解决Pandas中按条件过滤后分组求和的问题

你的需求是仅对B>2的行,按列A分组统计列C的和,并将结果匹配到原DataFrame对应行,预期a的总和为3(0+1+2)、b的总和为9(9),但当前代码计算的是全部分组的C总和,导致结果不符合预期。

问题原因

当前代码中的df.groupby('A')['C'].transform('sum')是对每个分组的所有行计算C的总和,没有过滤B>2的条件,因此得到的是:

  • a组:9+0+1+2=12
  • b组:9+9=18
    这和你想要的仅统计B>2行的需求不符。

解决方案

先筛选出B>2的行进行分组求和,再将结果映射回原DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame(dict(A=list('ababaa'), B=[1, 1, 3, 4, 5, 6], C=[9, 9, 0, 9, 1, 2]))

# 1. 计算符合条件的分组求和结果
filtered_sum = df[df['B'] > 2].groupby('A')['C'].sum()

# 2. 将结果映射到原DataFrame,无匹配项填充为0并转整数
df['Count'] = df['A'].map(filtered_sum).fillna(0).astype(int)

正确输出

A  B  C  Count
0  a  1  9      0
1  b  1  9      0
2  a  3  0      3
3  b  4  9      9
4  a  5  1      3
5  a  6  2      3

方案说明

  1. 先通过df[df['B'] > 2]筛选出满足条件的行,再对这个子集按A分组求和,得到每个分组的正确统计值。
  2. 使用map方法将每个A对应的求和结果匹配到原DataFrame的每一行,对于不满足B>2的行,因为没有匹配结果会生成NaN,最后用fillna(0)填充为0并转为整数类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:05:03