【发布时间】:2021-08-01 15:06:15
【问题描述】:
我是使用 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'])
我想计算打开率,同时按列 Tool_used 使用 Pandas 进行分组。 在 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,因为需要唯一计数。 谢谢
【问题讨论】:
-
您能添加一些预期的输出布局吗?是否会是每组的“开放率比率”列?
send_email_id将如何显示?
标签: python python-3.x pandas group-by case