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

如何对分组后的Pandas数据应用自定义函数计算方和根不确定度?

解决方案
  • 核心问题:apply返回的是每个分组的单个结果,与原DataFrame行索引不匹配,导致赋值后无法正确对应到每一行;而transform会自动将分组结果广播到组内所有行,完美匹配原数据结构。

直接用transform实现(推荐)

首先确保导入numpy:

import numpy as np

用lambda函数快速实现

# 你已实现的测量值均值计算
df["measurement"] = df.groupby("ID")["measurement"].transform("mean")
# 计算不确定度的方和根
df["uncertainty"] = df.groupby("ID")["uncertainty"].transform(lambda x: np.sqrt((x ** 2).sum()))

用自定义函数提升可读性

def calculate_combined_uncertainty(x):
    return np.sqrt((x ** 2).sum())

df["measurement"] = df.groupby("ID")["measurement"].transform("mean")
df["uncertainty"] = df.groupby("ID")["uncertainty"].transform(calculate_combined_uncertainty)

先分组统计再合并的方式

如果需要保留分组统计的中间结果,可采用这种更直观的方式:

import numpy as np

# 计算每个ID的统计量
grouped_stats = df.groupby("ID").agg(
    mean_measurement=("measurement", "mean"),
    total_uncertainty=("uncertainty", lambda x: np.sqrt((x**2).sum()))
).reset_index()

# 合并回原DataFrame
df = df.merge(grouped_stats, on="ID", how="left")

# 替换原列并清理临时列
df["measurement"] = df["mean_measurement"]
df["uncertainty"] = df["total_uncertainty"]
df.drop(["mean_measurement", "total_uncertainty"], axis=1, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:15:35