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

如何用Pandas计算分组区间数据的标准差与均值?

计算区间分组数据的均值与标准差(Pandas实现)

针对你提供的区间频率数据,我们可以通过组中值加权的方式计算均值和标准差,具体步骤如下:

1. 准备数据与计算组中值

首先利用Pandas IntervalIndex 的 .mid 属性提取每个区间的组中值,这是后续计算的核心基础:

import pandas as pd

# 你的原始数据
idx = pd.IntervalIndex.from_breaks([105, 110, 115, 120, 125, 130, 135])
df = pd.DataFrame({"Bin": idx, "Frequency": [2,5,6,8,8,1]})

# 新增组中值列
df['Mid'] = df['Bin'].mid

此时的df会包含每个区间的中间值:

Bin  Frequency    Mid
0  (105, 110]          2  107.5
1  (110, 115]          5  112.5
2  (115, 120]          6  117.5
3  (120, 125]          8  122.5
4  (125, 130]          8  127.5
5  (130, 135]          1  132.5

2. 计算均值

均值通过组中值×频率的加权和,除以总频率得到:

total_freq = df['Frequency'].sum()
mean = (df['Mid'] * df['Frequency']).sum() / total_freq
print(f"均值: {mean}")

运行结果:均值: 120.7

3. 计算标准差

标准差分为总体标准差和样本标准差,计算逻辑略有差异:

总体标准差(针对全部数据集)

公式:$\sigma = \sqrt{\frac{\sum (x_i - \mu)^2 \times f_i}{N}}$,其中$\mu$为均值,$f_i$为区间频率,$N$为总频率

import math

# 计算每个区间的加权平方差
weighted_sq_diff = ((df['Mid'] - mean) ** 2) * df['Frequency']
# 计算总体标准差
pop_std = math.sqrt(weighted_sq_diff.sum() / total_freq)
print(f"总体标准差: {pop_std}")

运行结果:总体标准差: 6.92243960378123

样本标准差(针对抽样数据集)

公式:$s = \sqrt{\frac{\sum (x_i - \bar{x})^2 \times f_i}{N-1}}$,分母使用总频率减1

sample_std = math.sqrt(weighted_sq_diff.sum() / (total_freq - 1))
print(f"样本标准差: {sample_std}")

运行结果:样本标准差: 7.03065133853385


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:37:37