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

Pandas groupby按条件筛选样本实现分组数值标准化的方法问询

实现方法

你可以先按box分组预计算每个分组下仅fruit为apple样本的均值和标准差,再将统计量映射回原表做标准化计算,这种方法可读性高、运行效率也更好:

import pandas as pd

# 原始数据
d = {'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
     'value': [10, 8, 7, 7, 0, 2, 9, 4, 0, 9, 10, 4, 5, 5],
     'box': [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2],
     'fruit': ['apple', 'apple', 'apple', 'lime', 'lime', 'orange',
               'orange', 'lime', 'orange', 'apple', 'apple', 'apple',
               'orange', 'orange']
     }
dummy_df = pd.DataFrame(d)

# 1. 预计算每个box下apple样本的均值、标准差
apple_stats = dummy_df[dummy_df['fruit'] == 'apple'].groupby('box')['value'].agg(apple_mean='mean', apple_std='std')
# 2. 将统计量合并到原表
dummy_df = dummy_df.join(apple_stats, on='box')
# 3. 计算标准化值
dummy_df['value_apple_stand'] = (dummy_df['value'] - dummy_df['apple_mean']) / dummy_df['apple_std']
# 可选:删除中间生成的统计量列
dummy_df = dummy_df.drop(columns=['apple_mean', 'apple_std'])

如果想要更简洁的单行写法,也可以直接对分组后的子DataFrame做筛选计算:

dummy_df['value_apple_stand'] = dummy_df.groupby('box', group_keys=False).apply(
    lambda g: (g['value'] - g[g['fruit']=='apple']['value'].mean()) / g[g['fruit']=='apple']['value'].std()
)

两种方法完全符合你的计算规则:box1用apple样本均值8.33、标准差1.52计算,box2用apple样本均值7.66、标准差3.21计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:15:04