You need to enable JavaScript to run this app. 使用pandas按受试者、时间点计算分组汇总统计并转置
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas按受试者、时间点计算分组汇总统计并转置

pandas 按受试者与时间点分组统计实现

原代码存在的核心问题

  • 列名匹配错误:示例数据集的受试者标识列是person_id,代码中误用不存在的subject_id列名,运行会直接抛出KeyError
  • 基础语法缺失:for循环语句末尾缺少必须的冒号,代码无法被正常解析
  • 列引用规则错误:groupby后取列值时写[value]未加字符串引号,pandas会将其识别为未定义的变量,触发NameError
  • 统计逻辑错位:计算标准差时未关联分组规则,直接对全表的value字段计算,完全偏离「按受试者+时间点分组统计」的要求
  • 无效冗余逻辑:循环内筛选子集、取时间点唯一值的代码没有做任何赋值或后续处理,属于无意义的运行步骤;且pandas的groupby原生支持全维度批量分组计算,无需手动写多层for循环逐次筛选子集,代码效率低且容易引入逻辑偏差

正确实现代码

首先导入依赖并构造测试数据集:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'person_id': [11,11,11,11,11,11,11,11,12,12,12],
    'time' :[0,0,0,1,2,3,4,4,0,0,1],
    'value':[101,102,np.nan,120,143,153,160,170,96,97,99]
})

执行分组统计:

# 按person_id、time维度分组,聚合计算value的均值、标准差
# pandas内置的mean、std聚合函数默认自动跳过NaN空值,无需额外手动过滤
grouped_result = df.groupby(['person_id', 'time'])['value'].agg(
    value_mean='mean',
    value_std='std'
).reset_index()

计算逻辑说明

  • 空值处理符合要求:例如person_id=11、time=0的分组下,原始value记录为101、102、np.nan,最终计算均值时仅纳入两个非空值,得到(101+102)/2=101.5,不会将空值作为独立记录参与计算
  • 输出结构匹配预期:每个「受试者+时间点」的组合对应单独一行统计结果,和参考示例的输出格式一致
  • 可选调整:如果需要切换总体/样本标准差的计算规则,可以通过给std函数传参实现,比如用value_std=lambda x: x.std(ddof=0)即可计算总体标准差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.14 03:06:04