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

pandas透视表数值舍入与SciPy stats.mode输出格式简化方法

透视表聚合输出格式优化实现

前置修正:原参考代码的导入语法问题

原代码的导入语句存在语法冲突,正确的基础导入为:

import numpy as np
import pandas as pd
from scipy import stats

长小数调整为1位小数展示的实现

两类方案按需选择:

  • 仅优化显示效果,不改动底层真实数据
    通过pandas浮点展示精度设置实现,不会修改聚合后的实际数值,适配需要保留原始精度、仅优化打印观感的场景:
    临时生效写法(不干扰全局pandas配置):

    with pd.option_context('display.float_format', lambda x: '%.1f' % x):
        # 透视表生成及打印逻辑放在上下文内执行
        print(pivot_result)
    

    全局生效写法:在代码全局区域添加pd.set_option('display.float_format', lambda x: '%.1f' % x),后续所有浮点型输出都会自动应用1位小数的展示规则。

  • 直接修改聚合结果的数值精度
    如果需要将聚合值转换为保留1位小数的真实数值(比如后续要基于透视表结果做二次计算),在透视表生成完成后直接调用round方法即可:

    pivot_result = pivot_result.round(1)
    

众数纯数值提取实现

由于stats.mode默认返回结构为(存储众数的数组, 存储对应出现次数的数组),会直接在透视表中展示嵌套元组,需要自定义包装函数提取纯众数值:

def get_clean_mode(series):
    # 处理空值场景,避免计算异常
    valid_series = series.dropna()
    if valid_series.empty:
        return np.nan
    # 从返回结构中提取纯众数值
    return stats.mode(valid_series)[0][0]

小提示:如果使用scipy 1.11及以上版本,可在调用stats.mode时添加keepdims=False参数,返回的众数会直接是标量,无需手动取数组索引。

将自定义函数替换原aggfunc参数中的stats.mode,完整的透视表生成代码为:

pivot_result = pd.pivot_table(
    df_inspections_violations, 
    index=['ACTIVITY YEAR', 'FACILITY ZIP'], 
    values="SCORE", 
    aggfunc=['mean', 'median', get_clean_mode]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 17:24:07