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

在GroupBy.agg中用Lambda求过滤后数据均值的问题

问题:分组后DataFrame如何提取过滤后数据的均值?

我在分组后的DataFrame中提取过滤后数据的均值时遇到问题:sum()函数能正常统计符合条件的记录数,但mean()返回的是符合条件的记录占总记录数的比例,不是我需要的过滤后数据的均值。

当前代码示例

df = test.groupby(['Code']).agg(
    Count=('% Change', 'count'),
    H2C_Up_Mean=('% C2H',lambda x: (x > 0).mean()),
    H2C_Pct_Up=('% C2H',lambda x: (x > 0).sum())
)

H2C_Pct_Up的结果与手动统计一致,是正确的;但H2C_Up_Mean得到的是H2C_Pct_Up除以Count的比例,不是过滤后数据的均值。

示例DataFrame

code% change% C2H
abc0.500.75
abc1.000.25
abc-0.25-0.50

期望输出

  • Count: 3(正确)
  • H2C_Pct_Up: 2(正确)
  • H2C_Up_Mean: 0.50(当前得到0.667,不符合预期)

解决方案

要计算过滤后(% C2H > 0)数据的均值,需要先筛选出分组中符合条件的数值,再对这些数值求均值,而不是对布尔值求均值。

修改后的代码:

df = test.groupby(['Code']).agg(
    Count=('% Change', 'count'),
    H2C_Up_Mean=('% C2H', lambda x: x[x > 0].mean()),
    H2C_Pct_Up=('% C2H', lambda x: (x > 0).sum())
)

原理说明

  • x[x > 0]会筛选出当前分组中% C2H大于0的所有数值;
  • 对筛选后的结果调用mean(),得到的就是符合条件数据的均值,而非比例。

针对示例数据,筛选后的值为[0.75, 0.25],均值为(0.75 + 0.25)/2 = 0.5,与期望输出一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:25:35