如何用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
相关产品推荐
相关产品推荐

