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

如何为Pandas自定义扩展describe函数,集成SciPy外部统计指标?

自定义Pandas describex函数集成SciPy统计指标的实现方法

先导入scipy.stats模块,然后把需要的统计指标用SciPy函数计算后整理成DataFrame,再和原统计结果合并即可。下面是修改后的完整代码,包含你要的所有统计量:

import pandas as pd
from scipy.stats import gmean, hmean, gstd

def describex(data, weights=None):
    # 统一转成DataFrame处理
    data = pd.DataFrame(data)
    # 保留原describe的基础统计结果
    stats = data.describe()
    
    # 添加Pandas自带的偏度、峰度
    skewness = pd.DataFrame({'skewness': data.skew()}).T
    kurtosis = pd.DataFrame({'kurtosis': data.kurtosis()}).T
    
    # 计算几何均值:过滤非正数,避免计算报错
    geom_mean = pd.DataFrame({'geometric mean': gmean(data[data > 0], axis=0)}).T
    # 计算调和均值:过滤0值
    harm_mean = pd.DataFrame({'harmonic mean': hmean(data[data != 0], axis=0)}).T
    # 计算几何标准差
    geom_std = pd.DataFrame({'geometric std': gstd(data[data > 0], axis=0)}).T
    
    # 计算加权均值:传入权重时才计算,需保证权重和数据列数匹配
    weighted_mean = pd.DataFrame()
    if weights is not None and len(weights) == data.shape[1]:
        weighted_mean = pd.DataFrame({'weighted mean': data.apply(lambda col: (col * weights).sum() / sum(weights))}).T
    
    # 合并所有统计结果(用concat替代已弃用的append)
    result = pd.concat([stats, kurtosis, skewness, geom_mean, harm_mean, geom_std, weighted_mean])
    return result

关键细节说明:

  • 几何均值/标准差:gmean和gstd要求数据全为正,所以先通过data[data > 0]过滤非正数,避免报错
  • 调和均值:hmean无法处理0值,提前过滤掉0再计算
  • 加权均值:新增weights参数,传入和数据列数一致的权重列表即可生成该指标;不需要时不传参数就不会显示
  • 用pd.concat替代了Pandas已弃用的append方法,保证代码兼容性

测试示例:

# 生成测试数据
test_data = pd.DataFrame({
    'col1': [1,2,3,4,5],
    'col2': [2,4,6,8,10]
})

# 无权重调用
print(describex(test_data))

# 带权重调用
print(describex(test_data, weights=[0.2, 0.8]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:50:45