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

基于对照组的多组实验样本pandas归一化实现方法咨询

问题解答

一、全局对照组平均值z的一行精简实现

1. 原生pandas最优写法

直接通过链式索引和聚合即可实现一行计算,性能和可读性都最好:

z = df.loc[df['identifier'] == 'Control', 'values'].mean()

2. 列表推导式实现

可以用列表推导式实现,但完全不推荐:pandas向量化操作的执行效率远高于列表遍历,语法也更简洁。非必要场景下不要用这种写法:

import numpy as np
z = np.mean([val for ident, val in zip(df['identifier'], df['values']) if ident == 'Control'])

二、样本归一化最简实现

直接使用pandas分组聚合+映射即可完成,全程向量化操作,逻辑清晰且执行效率高:

# 计算每个实验对应的对照组平均值
exp_control_avg = df[df['identifier'] == 'Control'].groupby('Experiment')['values'].mean()
# 计算各实验对应的归一化因子 = 全局对照均值z / 对应实验对照均值
exp_norm_factor = z / exp_control_avg
# 给所有样本的values乘以对应实验的归一化因子,得到校正后的值
df.loc[df['identifier'] == 'Sample', 'corrected_values'] = df.loc[df['identifier'] == 'Sample', 'values'] * df.loc[df['identifier'] == 'Sample', 'Experiment'].map(exp_norm_factor)

如果需要把校正值直接覆盖原values列,把上述代码中的corrected_values改成values即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:24:05