如何在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
相关产品推荐
相关产品推荐

