如何在Python中对预统计DataFrame计算均值与标准差?
计算预统计评分数据的均值与标准差
你的DataFrame以评分作为列名,对应选择该评分的人数作为值,这种结构需要用加权统计的方式计算均值和标准差,以下是具体实现方法:
方法一:先转换数据格式(更直观)
先把宽格式的原始数据重塑为「评分-人数」的长格式,便于理解和计算:
import pandas as pd # 原始预统计数据 df = pd.DataFrame({1:4, 2:10, 3:125, 4:85, 5:25}) # 转换为长格式 df_long = df.T.reset_index() df_long.columns = ['评分', '人数']
转换后的数据结构:
| 评分 | 人数 |
|---|---|
| 1 | 4 |
| 2 | 10 |
| 3 | 125 |
| 4 | 85 |
| 5 | 25 |
计算加权均值
完全匹配你手动计算的逻辑:
mean = (df_long['评分'] * df_long['人数']).sum() / df_long['人数'].sum() print(f"均值:{mean:.2f}") # 输出:3.47
计算加权标准差
先计算加权方差,再取平方根:
# 加权方差 variance = (df_long['人数'] * (df_long['评分'] - mean)**2).sum() / df_long['人数'].sum() # 标准差 std_dev = variance ** 0.5 print(f"标准差:{std_dev:.4f}") # 输出:0.7354
方法二:直接基于原始数据计算(更简洁)
无需转换格式,直接提取评分和对应人数计算:
import pandas as pd df = pd.DataFrame({1:4, 2:10, 3:125, 4:85, 5:25}) # 提取评分(转换为整数)和人数 scores = df.columns.astype(int) counts = df.iloc[0].values # 计算均值 mean = (scores * counts).sum() / counts.sum() # 计算标准差 variance = (counts * (scores - mean)**2).sum() / counts.sum() std_dev = variance ** 0.5 print(f"均值:{mean:.2f}") print(f"标准差:{std_dev:.4f}")
内容的提问来源于stack exchange,提问作者MatMorPau22
相关产品推荐
相关产品推荐

