【发布时间】:2020-09-30 03:01:42
【问题描述】:
我有类似于下面的数据框,我想围绕客户的行为创建一些摘要统计数据
pd.DataFrame([
['id1','23/5/2019','not_emailed']
,['id1','24/5/2019','not_emailed']
,['id1','25/5/2019','emailed']
,['id1','26/5/2019','emailed']
,['id1','27/5/2019','emailed']
,['id1','28/5/2019','emailed']
,['id1','29/5/2019','emailed']
,['id1','30/5/2019','emailed']
,['id1','31/5/2019','emailed']
,['id1','1/6/2019','emailed']
,['id1','2/6/2019','emailed']
,['id2','23/5/2019','not_emailed']
,['id2','24/5/2019','not_emailed']
,['id2','25/5/2019','emailed']
,['id2','26/5/2019','emailed']
,['id2','27/5/2019','emailed']
,['id3','29/5/2019','not_emailed']
,['id3','30/5/2019','emailed']
,['id3','31/5/2019','emailed']
,['id3','1/6/2019','emailed']
,['id3','2/6/2019','emailed']
,['id4','29/5/2019','not_emailed']
,['id4','30/5/2019','emailed']
,['id4','31/5/2019','emailed']
,['id4','1/6/2019','emailed']
,['id4','2/6/2019','emailed']
,['id4','2/7/2019','emailed']
,['id4','3/7/2019','emailed']
,['id4','4/7/2019','emailed']
],columns=['id','date','status'])
在这个数据集中可以观察到的主要场景有:
id1 于 25 日通过电子邮件发送但未转换
id2 于 27 日通过电子邮件发送,并于 28 日转换,因为我们没有看到该 id 的更多日志
id3 于 30 日通过电子邮件发送并在 3 日转换,因为我们没有看到该 id 的更多日志
id4 在 30 日通过电子邮件发送并在 3 日转换,但在 2 日再次流失
我想每天获得该信息的摘要
通过电子邮件发送了多少,转化了多少,之前已经转化的流失了多少
期望的潜在输出可能是:
pd.DataFrame([
['29/5/2019',10,3,1] ,
['30/5/2019',10,2,1]
],columns=['date','emailed_total','converted_total','churned_total']
)
不是上面的数字是随机的,不反映第一个共享数据集的统计数据
到目前为止我的方法:
1) 部分解决问题: 查找电子邮件的第一天 计算自第一次以来经过的天数 按经过的天数分组并汇总 有效,但不适用于流失客户
2) 循环日期 过滤通过电子邮件发送的唯一 ID 循环遍历未来的日期并计算集合之间的差异 做的工作,但不是很干净和pythonic
【问题讨论】:
-
在所需的输出数据框中有'emailed_total'、'converted_total'和'churned_total'。需要分别明确列的聚合条件。呈现的数据中只有两种状态。
-
三者中哪一个不清楚应该如何聚合? “emailed_total”:当天每个人都通过电子邮件发送,“converted_total”:之前通过电子邮件发送但当天缺席的每个人,“churned_total”:之前通过电子邮件发送,在前一天转换但他们又回到了列表中。
-
'churned_total' 返回列表,这是什么意思?你能详细说明一下总名和地位之间的关系吗?我不是母语人士。
-
对,所以如果客户流失了,它每天都会出现在我的数据中。如果客户已经转换,它将停止出现在数据上,但如果他再次流失,它将开始重新出现在数据集上。在 id4 的示例场景中:客户在 2020 年 5 月 30 日通过电子邮件发送并在 2020 年 3 月 6 日转换,因为在我的数据中没有记录 id4 的该日期。它们在 2020 年 2 月 7 日重新出现,因为它们再次搅动。
-
'churned_total' 的状态是什么?如果他们没有地位,你就不能算他们。您的描述是指取消的天数吗?我越来越不确定了。
标签: pandas time-series pandas-groupby analytics summary