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

pandas指定列范围应用掩码计算均值报Too many indexers错误解决

报错原因
  • .iloc/.loc作为pandas的二维索引器,仅支持传入行、列两个维度的索引参数,原代码同时传入行切片、掩码、列名三个参数,直接触发IndexingError: Too many indexers。
  • 原代码生成的掩码是基于全量数据长度创建的,和截取后的子区间长度不匹配,直接使用会出现索引对齐错误。
  • .iloc是纯位置索引,不支持直接传入列名字符串'test'筛选列。
正确实现代码

优先用全量布尔索引的写法,完全匹配「取原索引8、12、16计算overload均值,取索引5~16区间其余值计算baseline均值」的需求,不会出现位置偏移问题:

import pandas as pd
import numpy as np

data = pd.DataFrame({"test":[12, 4, 5, 4, 1, 3, 2, 5, 10, 9, 4, 3, 2, 1, 4, 2, 2, 4, 2, 5]})
range_start = 5
range_finish = 17

# 生成覆盖全量数据的取模掩码
full_mask = np.arange(len(data)) % 4 == 0

# 筛选:索引在[range_start, range_finish)区间内 + 掩码为True的行,取test列算均值
measured_stress_ratio_overload = data.loc[
    (data.index >= range_start) & (data.index < range_finish) & full_mask,
    'test'
].mean()

# 筛选:同区间内掩码为False的行,取test列算均值
measured_stress_ratio_baseline = data.loc[
    (data.index >= range_start) & (data.index < range_finish) & ~full_mask,
    'test'
].mean()
结果验证

运行后得到的结果符合预期:

  • measured_stress_ratio_overload取原位置8、12、16的值10、2、2,计算得均值为14/3 ≈ 4.6667
  • measured_stress_ratio_baseline取区间内其余9个值3、2、5、9、4、3、1、4、2,计算得均值为33/9 ≈ 3.6667

注意:用.loc组合多个布尔条件时,每个独立条件必须用圆括号包裹,逻辑与用&、逻辑或用|、布尔取反用~,不能用Python原生的and/or/not关键字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:36:28