pandas - 枢轴 ||创建比率/百分比的自定义列

2024-05-21

import numpy as np
import pandas as pd

data = {'experiment_name': ['exp1', 'exp1', 'exp1', 'exp1', 'exp1', 'exp1'], 
'variant': ['A', 'B', 'A','B','A','B'],'sessions_with_orders':[1,2,6,0,23,12],
'total_sessions':[10,23,56,22,89,12]}  
  
# Create DataFrame  
df = pd.DataFrame(data)    
df.pivot_table(index='variant',columns='experiment_name',values=['total_sessions','sessions_with_orders'],aggfunc=np.sum)

我有一些数据框,我使用聚合函数对其进行旋转。

我得到的输出是期望的。但是,我想创建比率sessions_with_orders/total_sessions。我该怎么做呢?这在 Excel 上是可行的,但我无法考虑 pandas-data 框架。

我不明白 lambda、cross_tab 或如何实现它们。
我在蟒蛇3.9.8。 np 版本1.22.3和 pd 版本1.3.4


IIUC,你可以使用assign:

(df
.pivot_table(index='variant',columns='experiment_name',values=['total_sessions','sessions_with_orders'],aggfunc=np.sum)
.assign(ratio=lambda d: d['sessions_with_orders']/d['total_sessions'])
)

output:

                sessions_with_orders total_sessions     ratio
experiment_name                 exp1           exp1          
variant                                                      
A                30                   155            0.193548
B                14                   57             0.245614

但是,如果您有多个实验,最好使用join(我在这里将演示的最后一个实验更改为“exp2”):

df2 = df.pivot_table(index='variant',columns='experiment_name',
                     values=['total_sessions','sessions_with_orders'],
                     aggfunc=np.sum)

df2.join(pd.concat({'ratio': df2['sessions_with_orders'].div(df2['total_sessions'])},
          axis=1))

output:

                sessions_with_orders       total_sessions           ratio     
experiment_name                 exp1  exp2           exp1  exp2      exp1 exp2
variant                                                                       
A                               30.0   NaN          155.0   NaN  0.193548  NaN
B                                2.0  12.0           45.0  12.0  0.044444  1.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas - 枢轴 ||创建比率/百分比的自定义列 的相关文章

随机推荐