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

Python pandas实现CGM非空行动态窗口均值与求和统计

Pandas 生物识别数据按CGM有效值聚合精简方案

核心实现思路

不用逐行写if判断循环,利用pandas内置的分组聚合能力就能实现需求,逻辑完全匹配规则:

  • 先给所有数据打分组标签:每遇到一个CGM列非NaN的行,分组编号加1,两个相邻CGM有效值之间的所有空值行,和后面的CGM有效值行归为同一组,天然对应需要计算的n行区间
  • 直接按分组做聚合计算,聚合完成的结果就是仅保留CGM有效值行的精简表,不需要额外做删空值操作

可直接运行代码

import pandas as pd
import numpy as np

# --------------------------
# 把下面的测试样例替换成你自己的DataFrame变量即可
# --------------------------
df = pd.DataFrame({
    'Time': pd.date_range(start='2024-01-01 08:00:00', periods=7, freq='1min'),
    'CGM': [np.nan, 5.6, np.nan, np.nan, 6.2, np.nan, 7.1],
    'HR': [72, 75, 76, 74, 78, 80, 77],
    'steps': [0, 12, 35, 22, 48, 10, 5],
    'distance': [0, 8.2, 23.1, 14.5, 32.7, 6.8, 3.3],
    'calories': [0, 1.1, 2.3, 1.5, 3.2, 0.7, 0.4]
})

# 生成分组辅助列
df['group_tag'] = df['CGM'].notna().cumsum()

# 按分组执行聚合
result = df.groupby('group_tag', as_index=False).agg(
    Time=('Time', 'last'),
    CGM=('CGM', 'last'),
    HR=('HR', 'mean'),
    steps=('steps', 'sum'),
    distance=('distance', 'sum'),
    calories=('calories', 'sum')
).drop(columns='group_tag')

# 打印结果验证
print(result)

逻辑匹配说明

  • 首个CGM有效值所在分组会包含从数据第一行到当前CGM行的所有数据,HR算平均值、其余三列算累加和,完全符合首个区间n的计算规则
  • 后续每个CGM有效值所在分组,刚好包含上一个CGM行的下一行到当前CGM行的所有数据,n值会随两个CGM值之间的空行数量自动适配,不需要手动计算间隔
  • 聚合后输出的结果表字段顺序和要求一致:Time、CGM、HR、steps、distance、calories,没有多余字段

适配调整提示

  • 如果HR列存在空值,默认mean()计算会自动跳过空值,符合常规数据处理场景;如果需要空值时整组HR返回NaN,把HR的聚合规则替换为HR=('HR', lambda x: x.mean(skipna=False))即可
  • 确保steps、distance、calories三列是数值类型,否则累加计算会报错,非数值类型可以提前用pd.to_numeric()做转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:01:48