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

如何用Pandas按-1000分组计算有效数据平均值并写入E列?

用Pandas实现传感器数据分组与平均值计算

完全可以用Pandas实现这个需求,以下是具体的实现步骤和代码:

步骤说明

  1. 标记行类型:先区分待机行(所有列值为-1000)和符合计算条件的有效行(所有列值为正)。
  2. 生成分组ID:利用待机行的累积计数,将两组待机行之间的有效数据划分为同一组。
  3. 计算分组平均值:对每个有效组计算平均值,并将结果填充到E列对应行。

代码实现

假设你的传感器数据包含A、B、C、D四列,我们需要生成E列存储分组平均值:

import pandas as pd

# 读取数据(替换为你的数据路径或数据源)
df = pd.read_csv("sensor_data.csv")

# 1. 标记待机行与有效计算行
# 标记所有列均为-1000的待机行
df["is_standby"] = (df[["A", "B", "C", "D"]] == -1000).all(axis=1)
# 标记所有列均为正值的有效计算行
df["is_valid"] = (df[["A", "B", "C", "D"]] > 0).all(axis=1)

# 2. 生成分组ID:通过待机行的累积和分割有效数据块
# 每次遇到待机行,分组ID递增,有效组内的行共享同一ID
df["group_id"] = df["is_standby"].cumsum()
# 待机行和不符合计算条件的行不分配分组ID
df.loc[~df["is_valid"] | df["is_standby"], "group_id"] = pd.NA

# 3. 计算每组平均值并填充到E列
# 对每个有效组计算A-D列的整体平均值
group_avg = df[df["is_valid"]].groupby("group_id")[["A", "B", "C", "D"]].mean().mean(axis=1)
# 将分组平均值映射回原数据的E列
df["E"] = df["group_id"].map(group_avg)
# 待机行和无效行的E列设为NaN(可根据需求改为其他值,比如-1000)
df.loc[~df["is_valid"] | df["is_standby"], "E"] = pd.NA

# 可选:删除中间辅助列
df = df.drop(columns=["is_standby", "is_valid", "group_id"])

关键细节解释

  • 分组逻辑:df["is_standby"].cumsum()会给每一行分配一个递增的计数,每次遇到待机行时计数加1,这样两组待机行之间的有效数据会拥有相同的group_id,实现自动分组。
  • 平均值计算:先对每组的A-D列分别求均值,再对这四个均值求整体均值(如果需要的是每行的均值再分组平均,逻辑一致,可直接调整为df[df["is_valid"]].groupby("group_id").mean().mean(axis=1))。
  • 结果填充:通过map将分组平均值对应到组内的每一行,确保有效组内的所有符合条件的行都能看到该组的平均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:32:35