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

计算DataFrame中分组及剩余群体的均值与标准差

解决方案

首先构造示例数据:

import pandas as pd

data = {
    'id': [1,1,1,1,1,1,1],
    'age': [12,18,25,29,32,31,37],
    'weight': [45,110,25,85,49,70,39],
    'group': ['[10-20]', '[10-20]', '[20-30]', '[20-30]', '[30-40]', '[30-40]', '[30-40]']
}
df = pd.DataFrame(data)

步骤1:计算分组内的均值与标准差

通过groupby聚合直接得到目标分组的统计量:

group_stats = df.groupby('group')['weight'].agg(
    group_mean_weight='mean',
    group_sd_weight='std'
).reset_index()

步骤2:计算其余组合并后的均值与标准差

遍历每个分组,筛选出当前分组外的所有数据并计算统计量:

groups = df['group'].unique()
rest_stats = []

for g in groups:
    rest_data = df[df['group'] != g]['weight']
    rest_stats.append({
        'group': g,
        'rest_mean_weight': rest_data.mean(),
        'rest_sd_weight': rest_data.std()
    })

rest_stats_df = pd.DataFrame(rest_stats)

步骤3:合并结果并格式化

将两组统计结果按group字段合并,最终得到目标格式:

final_df = pd.merge(group_stats, rest_stats_df, on='group').set_index('group')

最终输出

运行后得到的结果如下:

group_mean_weight  group_sd_weight  rest_mean_weight  rest_sd_weight
group                                                                          
[10-20]                77.50        45.961941         53.600000        23.375199
[20-30]                55.00        42.426407         57.600000        30.805844
[30-40]                52.67        15.011108         70.000000        42.426407

补充说明

  • 默认使用样本标准差(自由度为n-1),若需计算总体标准差,可在std()中添加参数ddof=0
  • 分组格式完全保留原始输入的方括号样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:15:57