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

Pandas:基于组内对照值实现组内结果缩放

问题描述

现有如下包含分组、处理方式及测量结果的DataFrame:

import pandas as pd

X = pd.DataFrame({
    'group':['A','A','A','B','B','B'],
    'treatment':['control', 'high_dose', 'low_dose', 'control', 'high_dose', 'low_dose'],
    'result':[2, 6, 4, 3, 12, 15]
})

对应的表格形式:

grouptreatmentresult
Acontrol2
Ahigh_dose6
Alow_dose4
Bcontrol3
Bhigh_dose12
Blow_dose15

需要实现:用每个分组内control处理对应的result值,对同组所有结果进行缩放,生成新列result_group_stand,最终得到如下结果:

group  treatment  result  result_group_stand
0     A    control       2                    1
1     A  high_dose       6                    3
2     A   low_dose       4                    2
3     B    control       3                    1
4     B  high_dose      12                    4
5     B   low_dose      15                    5

即A组所有结果除以control值2,B组所有结果除以control值3。

解决方法

方法1:使用groupby + transform提取组内control值

通过分组后提取对应control的结果,再广播到整组完成计算:

# 提取每个group对应的control结果,生成映射系列
control_vals = X[X['treatment'] == 'control'].set_index('group')['result']

# 按group分组,用transform获取每组的control值,计算缩放结果
X['result_group_stand'] = X['result'] / X.groupby('group')['result'].transform(
    lambda x: control_vals[x.name]
)

方法2:提取control值后合并到原DataFrame

先单独提取各分组的control值,通过合并关联到原数据后计算缩放:

# 提取control组数据并重命名列
control_df = X[X['treatment'] == 'control'][['group', 'result']].rename(columns={'result': 'control_result'})

# 合并原数据与control值
X_merged = pd.merge(X, control_df, on='group', how='left')

# 计算缩放列
X_merged['result_group_stand'] = X_merged['result'] / X_merged['control_result']

# 可选:删除中间列
X = X_merged.drop('control_result', axis=1)

方法3:使用map匹配组内control值

构建分组到control值的字典,通过map匹配后直接计算:

# 构建group到control result的字典
control_dict = X[X['treatment'] == 'control'].set_index('group')['result'].to_dict()

# 匹配对应control值并计算缩放
X['result_group_stand'] = X['result'] / X['group'].map(control_dict)

三种方法均可实现需求,其中方法3代码最简洁,方法2逻辑最直观,可根据实际场景选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:02:50