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

如何在Pandas中基于其他列条件编写自定义聚合函数

解决方案

没问题,我来帮你调整聚合函数,精准实现你要的按条件聚合需求!

核心思路是在每个分组的子DataFrame里,分别根据d列的阈值筛选行,再计算对应列的统计值:

  • Sum_a 取分组内 d < 250 的行中a列的和,没有符合条件的行时sum会自动返回0,正好匹配你要的结果
  • Mean_b 取分组内 d > 250 的行中b列的均值

修改后的完整代码

import pandas as pd

# 修正示例数据的c列值(加上引号,避免未定义变量错误)
df = pd.DataFrame({
    "a": [10,20,30,40], 
    "b": [1,2,3,4], 
    "c": ["c1","c1","c1","c2"], 
    "d": [100,200,300,400]
})

def my_agg91(x):
    # 按d的条件分别计算
    sum_a = x[x['d'] < 250]['a'].sum()
    mean_b = x[x['d'] > 250]['b'].mean()
    # 返回指定索引的Series,确保列名对应
    return pd.Series(
        {'Sum_a': sum_a, 'Mean_b': mean_b},
        index=['Sum_a', 'Mean_b']
    )

df2 = df.groupby(['c']).apply(my_agg91)
print(df2)

运行结果

Sum_a  Mean_b
c                 
c1    30.0     3.0
c2     0.0     4.0

代码说明

  1. 针对每个分组x,用布尔索引x['d'] < 250筛选出符合条件的行,再对a列求和;
  2. 同理用x['d'] > 250筛选后对b列求均值;
  3. 返回的Series指定了索引,保证分组后的结果列顺序和你要的一致;
  4. 当分组内没有符合条件的行时(比如c2中没有d<250的行),sum()会返回0,完美匹配预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:23:53