python透视表中的计算列

2024-10-03 13:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

数据帧:

In [19]: df_report
Out[19]: 
         Program & SKU  TPages  BOFTE
0           Sayan Lite  100000      3
1           Sayan Lite   50000      3
2           Sayan Lite   30000      4
3           Sayan Lite   20000      1
4           Sayan Lite    2175      1
5           Sayan Lite    2175      1
6           Sayan Lite    2175      1
7           Sayan Lite    2175      1
8           Sayan Lite    2176      1
9           Sayan Lite    2176      1
10  Sayan Premium Plus   20000      1
11  Sayan Premium Plus   40000      1
12  Sayan Premium Plus   60000      1
13  Sayan Premium Plus   80000      1
14  Sayan Premium Plus   40160      1

我有以下熊猫数据透视表:

pt_index=['Program & SKU']
pt_values=['Tpages','Tsheets','BOFTE']

pd.pivot_table(df_report,
               index=pt_index,
               values=pt_values,
               aggfunc=[np.sum],
               margins=True)

它产生以下输出:

Out[6]: 
                     sum                
                   BOFTE  Tpages Tsheets
Program & SKU                           
Sayan Lite          17.0  213054  173454
Sayan Premium Plus   5.0  240160  196835
All                 22.0  453214  370289

如何创建一个计算列,其中BOFTE的总和是Tpages总和的百分比

预期产出:

Out[6]: 
                     sum                
                   BOFTE       Tpages 
Program & SKU                           
Sayan Lite          0.0000798  213054 
Sayan Premium Plus  0.0000208  240160

Tags: 数据ptdfindexplusliteoutprogram
3条回答

提问时请提供输入数据集

您可以在数据透视表上进行计算:

df.droplevel('sum', axis=1).assign(BOFTE=df['BOFTE']/df['Tpages'])

或者,如果你想要一个百分比,乘以100:

df.droplevel('sum', axis=1).assign(BOFTE=df['BOFTE']/df['Tpages']*100)

您可以简单地使用:

pd.set_option("precision", 7)   # set with precision 7

df[('sum', 'BOFTE')] = df[('sum', 'BOFTE')] / df[('sum', 'Tpages')]

结果:

                          sum        
                        BOFTE  Tpages
PROGRAM & SKU                        
Sayan Lite          0.0000798  213052
Sayan Premium Plus  0.0000208  240160
All                 0.0000485  453212

你是说:

df['newcol'] = df['BOFTE'] / df['Tpages']

相关问题 更多 >