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

Pandas调整表格结构实现数据透视及求和后取对数问题

问题解决方法

你的原有写法报错的核心原因是aggfunc=math.log(np.sum)的逻辑错误:该写法会直接对np.sum这个函数对象执行对数计算,而非先对分组数据求和再对结果取对数,自然无法运行。
推荐按以下两种方式实现:

方案1:先聚合再统一取对数(性能更优,推荐优先使用)

先完成基础的透视求和,再对整张透视表的所有值批量计算常用对数:

import pandas as pd
import numpy as np

# df为你的原始数据表
pivot_sum = pd.pivot_table(
    df,
    index="Year",
    columns="Company",
    values="Number",
    aggfunc="sum"
)
# 取常用对数,若存在求和为0的场景,可加极小值避免报错:np.log10(pivot_sum + 1e-8)
pivot_log = np.log10(pivot_sum)

方案2:自定义聚合函数一步完成

如果需要在透视时直接完成计算,可自定义聚合规则传入aggfunc:

import pandas as pd
import numpy as np

def sum_then_log10(group_values):
    return np.log10(group_values.sum())

pivot_log = pd.pivot_table(
    df,
    index="Year",
    columns="Company",
    values="Number",
    aggfunc=sum_then_log10
)

注意事项

  • 常用对数计算请使用np.log10,math.log默认计算自然对数,且不支持批量处理数组类型的结果
  • 若分组求和结果可能为0,可在取对数前给求和结果加一个极小偏移值(如1e-8),避免出现负无穷的异常值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:12:02