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

理解Group By对缺失值的处理及.mean()与手动计算均值的差异

问题原因

pandas自带的groupby.mean()方法计算均值时,会默认跳过所有NA值:分子仅对非NA的delta_t求和,分母也仅统计非NA的delta_t数量,因此和你手动用pid总出现次数作为分母的计算逻辑不符。

调整方案

你可以通过自定义分组聚合逻辑来实现需求:分子忽略NA值求和,分母取对应pid分组的总观测数(含NA行),两种实现方式如下:

写法1:单步lambda聚合

df2 = df1.reset_index().groupby('pid')['delta_t'].agg(
    avg_delta = lambda s: s.sum(skipna=True) / s.size
).reset_index().set_index('pid')
  • s.sum(skipna=True):自动忽略NA值计算当前pid的delta_t总和,作为分子
  • s.size:返回当前pid分组下的总行数(包含delta_t为NA的行),作为分母

写法2:分步骤计算(更适合大数据量,可读性更高)

# 先按pid分组
grouped = df1.reset_index().groupby('pid')['delta_t']
# 计算忽略NA的总和
delta_sum = grouped.sum(skipna=True)
# 计算pid的总出现次数
total_cnt = grouped.size()
# 计算均值后整理成目标格式
df2 = (delta_sum / total_cnt).reset_index(name='delta_t').set_index('pid')
效果验证

以你给出的示例数据中pid=id1为例:

  • 总出现次数为3次,delta_t非NA的值仅为1
  • 调整前默认mean()结果为1/1=1
  • 调整后计算结果为1/3≈0.333,和手动计算逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:42:02