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

pandas如何按固定间隔位置计算DataFrame指定列的两类平均值

Pandas间隔取值计算双均值实现方案

原代码存在的基础问题

  • pandas Series 求均值的内置方法为.mean(),不存在.average()方法,直接调用会触发属性报错
  • 硬编码切片区间[0:5]、[1:4]仅能覆盖前10行数据,无法适配任意长度数据集,也实现不了每隔5位重复取值的逻辑
  • 原测试数据代码存在语法错误,字典初始化后缺失右括号

核心实现逻辑

两个指标的取值可以通过位置索引对5取模的方式快速拆分,无需手动循环切片,不会出现取值遗漏或错算:

  • overload_average:筛选所有位置索引对5取模结果为0的行,即索引0、5、10……对应的值,计算均值
  • baseline_average:筛选所有位置索引对5取模结果不为0的行,即每个overload取值点之后的4个值,对应索引1-4、6-9……区间,计算均值

纯Pandas实现代码

import pandas as pd

# 初始化测试数据
data = pd.DataFrame({"strain":[12, 4, 5, 4, 1, 3, 2, 5, 10, 9]})

# 按取模规则筛选值计算均值
overload_average = data['strain'].iloc[lambda x: x.index % 5 == 0].mean()
baseline_average = data['strain'].iloc[lambda x: x.index % 5 != 0].mean()

基于提供的测试数据计算结果:

  • overload_average取值为索引0的12、索引5的3,均值为7.5
  • baseline_average取值为剩余8个值,均值为5.0

Numpy适配方案(超大数据集性能更优)

如果数据集规模较大,可以借助numpy生成位置掩码做筛选,逻辑和纯pandas版本一致,遍历开销更低:

import numpy as np

# 生成从0开始的连续位置索引,避免原DataFrame索引不连续/非0起始导致的错误
pos_idx = np.arange(len(data))
overload_mask = pos_idx % 5 == 0
baseline_mask = ~overload_mask

overload_average = data['strain'].iloc[overload_mask].mean()
baseline_average = data['strain'].iloc[baseline_mask].mean()

注意事项

  • 如果你的DataFrame索引不是从0开始的连续整数,不要直接使用df.index %5做筛选,优先使用np.arange(len(df))生成位置索引,避免取值错位
  • 取模逻辑天然适配末尾不足5个值的场景:比如数据长度为13时,索引10为overload取值点,索引11、12会自动被纳入baseline计算,不会出现数据遗漏

内容的提问来源于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.29 12:09:18