讲师中心 微信公众号
AI工具推荐 视频效率加速

如何用 Pandas 按 -1000 分割数据并计算各段有效值的平均值

千雪吖_7200

千雪吖_7200

发布时间:2026-02-17 11:47:03

|

484人浏览过

|

来源于php中文网

原创

如何用 Pandas 按 -1000 分割数据并计算各段有效值的平均值

本文介绍如何利用 pandas 对含哨兵值(-1000)的传感器数据进行智能分组,识别每段有效测量区间,计算其多列均值并写入新列(如 e 列),同时支持“仅当所有列均为有效值时才参与计算”的严格模式。

本文介绍如何利用 pandas 对含哨兵值(-1000)的传感器数据进行智能分组,识别每段有效测量区间,计算其多列均值并写入新列(如 e 列),同时支持“仅当所有列均为有效值时才参与计算”的严格模式。

在工业传感器或嵌入式设备采集的数据中,常以固定哨兵值(如 -1000)表示待机/无效状态。真实测量数据则夹在这些哨兵块之间,且每段有效数据的行数不固定。目标是:将连续非 -1000 的行视为一个逻辑组,对每组内所有有效行的指定列(A–D)求均值,并将该均值填入该组首行对应的 E 列;若某行所在组不满足“全列有效”条件,则 E 留空。

核心思路:基于哨兵值构建分组标识

关键在于将原始数据按 -1000 哨兵行自然切分。我们选用列 A 作为主哨兵判断依据(因其在示例中始终为 -1000 或有效值),通过布尔掩码与累积和生成唯一组 ID:

import pandas as pd

# 构造示例数据(与问题一致)
data = {
    'A': [-1000, -1000, -1000, 1, 7, -1000, 3, 1, -1000, -1000],
    'B': [-1000, -1000, -1000, 2, 10, -1000, 5, 11, -1000, -1000],
    'C': [-1000, -1000, -1000, 3, 5, -1000, 9, 2, -1000, -1000],
    'D': [-1000, -1000, -1000, 4, 6, -1000, 9, 10, -1000, -1000]
}
df = pd.DataFrame(data)

# 步骤1:标记哨兵行(以A列为基准)
cond = df['A'] == -1000

# 步骤2:生成组ID —— 每遇到一个非哨兵行,组号+1;哨兵行继承前一组号或为0
grp = (~cond).cumsum()  # 更鲁棒:用 ~cond(非哨兵)累积,避免起始为0组歧义

# 步骤3:筛选出所有非哨兵行(即有效数据行)
valid_rows = df[~cond].copy()

# 步骤4:按组ID分组,对A-D列分别求均值,再对每组的列均值取行均值(即整体均值)
# 注意:此处 mean(axis=1) 是对每组内各列均值再平均,等价于「先拼接所有有效值,再全局平均」
group_means = valid_rows.groupby(grp)[['A', 'B', 'C', 'D']].mean().mean(axis=1)

# 步骤5:将结果映射回原DataFrame的'E'列(仅填入对应组的首行,其余留空)
df['E'] = None
for group_id, mean_val in group_means.items():
    first_idx = valid_rows[valid_rows.index.isin(df[~cond].index) & (grp == group_id)].index[0]
    df.loc[first_idx, 'E'] = round(mean_val, 2)

运行后,df['E'] 将在第3行(索引3)填入 4.75,第6行(索引6)填入 6.25,其余为 None,完全匹配期望输出。

进阶需求:仅当整行全为有效值时才参与计算

问题补充提到:“有时某列是正数而其他列为 -1000,能否只在所有列都为正数时才计入平均?”——这要求更严格的过滤逻辑:

# 定义有效行:A、B、C、D 四列全部 > 0(排除 -1000 和负值)
valid_mask = (df[['A','B','C','D']] > 0).all(axis=1)

# 重新构建组ID:仅基于有效行位置(跳过所有含-1000的行)
grp_strict = valid_mask.cumsum()

# 提取严格有效的行并分组求均值
strict_means = df[valid_mask].groupby(grp_strict)[['A','B','C','D']].mean().mean(axis=1)

# 写入E列:仅在严格有效行的首行写入
df['E'] = None
for gid, val in strict_means.items():
    first_valid_idx = df[valid_mask].groupby(grp_strict).apply(lambda x: x.index[0]).get(gid, None)
    if first_valid_idx is not None:
        df.loc[first_valid_idx, 'E'] = round(val, 2)

此方案确保 E 列的每个值都源自真正完整的测量记录,杜绝因单列异常导致的统计偏差。

注意事项与最佳实践

  • 哨兵列选择:若 A 列不稳定(如存在非 -1000 的待机值),建议改用 (df[['A','B','C','D']] == -1000).all(axis=1) 作为 cond,确保整行均为哨兵才切分。
  • 空组处理:groupby(...).mean() 遇到空组会返回 NaN,需用 .dropna() 清洗。
  • 性能优化:对百万级数据,避免多次 groupby;可一次性计算 df[valid_mask].assign(group_id=grp_strict) 后聚合。
  • 扩展性:若需写入多列(如 E, F 分别存均值、标准差),直接修改 agg({'A': 'mean', 'B': 'std'}) 即可。

掌握这一模式,即可灵活应对各类基于哨兵值的时序数据分段分析任务。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

340

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

252

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

711

2026.04.13

传感器故障解决方法
传感器故障解决方法

传感器故障排除指南:识别故障症状(如误读或错误代码)。检查电源和连接(确保连接牢固,无损坏)。校准传感器(遵循制造商说明)。诊断内部故障(目视检查、信号测试、环境影响评估)。更换传感器(选择相同规格,遵循安装说明)。验证修复(检查信号准确性,监测异常行为)。

4484

2024.06.04

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

18693

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

433

2025.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

328

2025.12.30

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

343

2026.03.06

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn