如何根据客户ID /电子邮件计算流失率?



我正在尝试使用以下数据计算每月的客户流失率。然而,不幸的是,我没有一个布尔值,当客户搅动或不搅动时,它的值为1/True或0/False。您可以假设,当客户在某一个月下订单时,他/她没有流失,当他/她在那个月没有下订单时,他/她就流失了。我明白这会导致流失率的波动,但现在这无关紧要。

项th>2017-11-07 19:06:43面包、牛奶2017-11-07 20:06:432017-12-07 21:06:43键盘,豆浆

IIUC,将每一行按月分组,并将CustomerID列转换为集合:

out = df.groupby(pd.Grouper(freq='M', key='date'))['CustomerID'].apply(set)
print(out)
# Output
date
2017-11-30    {00002, 00001}
2017-12-31           {00003}
2018-01-31    {00002, 00001}
2018-02-28           {00003}
2018-03-31    {00002, 00003}
2018-04-30           {00004}
Freq: M, Name: CustomerID, dtype: object

现在你必须找出两个集合之间的差:

out = out.to_frame().assign(CustomerIDPrev=out.shift(fill_value=set())) 
.apply(lambda x: x.iloc[1].difference(x.iloc[0]), axis=1).tolist()
print(out)
# Output
date
2017-11-30                {}
2017-12-31    {00002, 00001}
2018-01-31           {00003}
2018-02-28    {00002, 00001}
2018-03-31                {}
2018-04-30    {00002, 00003}
Freq: M, dtype: object

最新更新