我是Python的初学者, 我正在尝试仅在一个代码行中计算打开率(两个不同计数之间的比率)。 我的数据框是这样的:
df = pd.DataFrame([
(142, 1, 'open' , 'Mobile'),
(144, 2, 'open' , 'Mobile'),
(144, 1, 'delivered', 'Web'),
(142, 1, 'delivered', 'Mobile'),
(142, 2, 'delivered', 'Web'),
(144, 1, 'open', 'Web'),
(142, 2, 'open', 'Mobile')
], columns=['sent_mail_id', 'customer_id', 'event' , 'Tool_used'])
我想使用 Pandas 按 Tool_used 列分组时计算打开率。 在 SQL 语言中是这样的:
select
Tool_used ,
count(distinct case when event='open' then sent_mail_id end)/count(distinct case when
event='delivered' then sent_mail_id end)
from df
group by 1
请注意,由于需要唯一的计数,因此我需要单独计算 sent_mail_id。 谢谢
最佳答案
看看这是否是您所需要的,在每个组中有一列打开率
:
df1 = ((df.loc[df['event'] == 'open'].groupby('Tool_used')['event'].count()
/
df.loc[df['event'] == 'delivered'].groupby('Tool_used')['event'].count())
.to_frame(name='open rate ratio')
).reset_index()
结果:
print(df1)
Tool_used open rate ratio
0 Mobile 3.0
1 Web 0.5
关于python - 使用 Pandas 计算一组计数的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67483523/