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

如何解决Pandas按患者分组求平均的KeyError并修改索引?

解决Pandas分组均值计算的KeyError并实现需求

错误原因分析

你遇到的KeyError: -1是因为代码中treatment_df[-1]试图通过整数-1引用列,但Pandas中直接用整数作为列索引仅适用于列名是整数的场景,而你的最后一列列名为patient,因此会触发键不存在的错误。

实现步骤与代码示例

假设你的输入DataFrame结构如下(包含治疗指标列和最后一列patient,格式为[分组标识]_P[编号]):

import pandas as pd

# 示例输入DataFrame
data = {
    'treatment_A': [10, 12, 11, 9, 13, 8, 7, 9, 10, 11],
    'treatment_B': [20, 22, 21, 19, 23, 18, 17, 19, 20, 21],
    'patient': ['T1_P1', 'T1_P2', 'T1_P3', 'T1_P4', 'T1_P5', 
                'T2_P1', 'T2_P2', 'T2_P3', 'T2_P4', 'T2_P5']
}
treatment_df = pd.DataFrame(data)

1. 正确分组计算均值

根据patient列的P1-P5重复规则,我们提取patient列中第一个下划线前的分组标识(如T1、T2)作为分组键,再计算每组的均值:

# 提取分组标识:拆分patient列,取第一个下划线前的部分
group_keys = treatment_df['patient'].str.split('_').str[0]
# 分组计算数值列的均值
mean_df = treatment_df.groupby(group_keys).mean(numeric_only=True)

2. 索引自动符合需求

上述代码生成的mean_df索引已经是去除_P1至_P5的分组标识,无需额外修改,预期输出如下:

treatment_A  treatment_B
group_keys                         
T1                 11.0         21.0
T2                  9.0         19.0

备选:按固定行数(每5行)分组

如果你的分组规则是严格每5行一组(不依赖patient列内容),可以用以下代码:

import numpy as np
# 按每5行分组计算均值
mean_df = treatment_df.groupby(np.arange(len(treatment_df)) // 5).mean(numeric_only=True)
# 从原patient列提取每组的分组标识作为新索引
mean_df.index = treatment_df['patient'].str.split('_').str[0].iloc[::5].tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:09:22