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

如何为Pandas DataFrame按分组添加CI置信区间上下限列

实现方法

按AgeGroup和ind双字段分组计算values列的置信区间上下限,再将分组计算结果合并回原DataFrame,即可实现同组所有行匹配相同CI值的效果,完全匹配你期望的输出结构。

完整可运行代码

import pandas as pd
from scipy import stats

# 定义分组置信区间计算函数,默认计算95%置信区间
def get_confidence_interval(group, conf_level=0.95):
    values = group['values']
    group_mean = values.mean()
    # 计算标准误
    standard_err = stats.sem(values)
    # 计算边际误差(小样本用t分布,大样本可替换为正态分布)
    margin_err = standard_err * stats.t.ppf((1 + conf_level) / 2, len(values) - 1)
    return pd.Series({
        'Lower_Bound': group_mean - margin_err,
        'Upper_Bound': group_mean + margin_err
    })

# 双字段分组计算各分组的CI上下限
ci_result = merged.groupby(['AgeGroup', 'ind']).apply(get_confidence_interval).reset_index()

# 将CI结果合并回原表
merged = merged.merge(ci_result, on=['AgeGroup', 'ind'], how='left')

参数调整说明

  • 如果需要修改置信水平,直接给get_confidence_interval传参即可,例如要计算90%置信区间,将apply部分改为.apply(get_confidence_interval, conf_level=0.9)
  • 如果样本量足够大需要用正态分布近似计算,将计算margin_err的代码替换为margin_err = standard_err * stats.norm.ppf((1 + conf_level) / 2)即可
  • 如果需要和示例输出完全一致把Upper_Bound放在Lower_Bound前面,最后加一行代码调整列顺序即可:
    merged = merged[['AgeGroup', 'values', 'ind', 'Upper_Bound', 'Lower_Bound']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:51:27