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

如何在Pandas透视表中创建计算列:计算BOFTE总和占Tpages总和的比例

实现Pandas透视表中BOFTE列替换为占Tpages总和的比例

咱们一步步来解决这个需求,先把透视表的结果存下来方便修改,再逐步调整列值和输出结构:

步骤1:生成并存储基础透视表

先调整原代码,把透视表结果保存到变量里,同时可以先只保留需要的列(避免后续再删除多余列):

import pandas as pd
import numpy as np

# 假设df_report是你的原始数据框
pt_index = ['Program & SKU']
pt_values = ['Tpages', 'BOFTE']  # 仅保留需要计算的列
pivot_df = pd.pivot_table(df_report, index=pt_index, values=pt_values, aggfunc=[np.sum], margins=True)

步骤2:替换BOFTE为占Tpages总和的比例

因为透视表是多层列索引,所以要指定完整的列路径来做计算替换:

# 计算比例:BOFTE总和 / 对应行的Tpages总和
pivot_df[('sum', 'BOFTE')] = pivot_df[('sum', 'BOFTE')] / pivot_df[('sum', 'Tpages')]

步骤3:整理输出结构(移除汇总行)

如果不需要最后的All汇总行,直接删除即可:

# 移除All汇总行
pivot_df = pivot_df.drop('All')

完整代码示例

把所有步骤整合起来,运行后就能得到你期望的结果:

import pandas as pd
import numpy as np

# 生成基础透视表
pt_index = ['Program & SKU']
pt_values = ['Tpages', 'BOFTE']
pivot_df = pd.pivot_table(df_report, index=pt_index, values=pt_values, aggfunc=[np.sum], margins=True)

# 替换BOFTE为比例值
pivot_df[('sum', 'BOFTE')] = pivot_df[('sum', 'BOFTE')] / pivot_df[('sum', 'Tpages')]

# 移除汇总行
pivot_df = pivot_df.drop('All')

print(pivot_df)

运行后输出结果如下:

sum               
               BOFTE  Tpages
Program & SKU                        
Sayan Lite    0.0000798  213054
Sayan Premium Plus  0.0000208  240160

如果需要控制小数位数,可以用round()方法优化显示,比如pivot_df[('sum', 'BOFTE')] = pivot_df[('sum', 'BOFTE')].round(7),让数值更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:59:05