用Python计算滚动保留[重复]

Posted

技术标签:

【中文标题】用Python计算滚动保留[重复]【英文标题】:Calculating rolling retention with Python [duplicate] 【发布时间】:2020-01-08 21:42:45 【问题描述】:

我在计算滚动保留时遇到问题。

我试图弄清楚如何使 groupby 起作用,但它似乎只适合计算经典留存率。

滚动保留 - 每个组中在确切月份或更晚登录的用户数量。

data = 'id':[1, 1, 1, 2, 2, 2, 2, 3, 3], 
        'group_month': ['2013-05', '2013-05', '2013-05', '2013-06', '2013-06', '2013-06', '2013-06', '2013-06', '2013-06'], 
        'login_month': ['2013-05', '2013-06', '2013-07', '2013-06', '2013-07', '2013-09', '2013-10', '2013-09', '2013-10'] 

转换数据:

data = pd.DataFrame(data)

pd.to_datetime(data['group_month'], format='%Y-%m', errors='coerce')

pd.to_datetime(data['login_month'], format='%Y-%m', errors='coerce')

为了计算经典留存率(计算每个同类群组中在确切月份登录的用户,我使用了以下代码:

classic_ret = pd.DataFrame(data[(data['login_month'] >= data['group_month'])].groupby(['group_month', 'login_month'])['id'].count())

classic_ret.unstack()

滚动保留应该有以下输出:

+-------------+---------+---------+---------+---------+---------+---------+
| group_month | 2013-05 | 2013-06 | 2013-07 | 2013-08 | 2013-09 | 2013-10 |
+-------------+---------+---------+---------+---------+---------+---------+
| 2013-05     |       1 |       1 |       1 |       1 |       1 |       1 |
| 2013-06     |       0 |       1 |       1 |       1 |       2 |       2 |
+-------------+---------+---------+---------+---------+---------+---------+

【问题讨论】:

这可能有助于计算和可视化留存率:link 【参考方案1】:

使用交叉表,我只能管理下面的表格。

a = data.set_index('login_month').groupby('id').resample('M').last().ffill().drop('id', axis=1).reset_index()

pd.crosstab(a.group_month, a.login_month)

输出

login_month     2013-05-31  2013-06-30  2013-07-31  2013-08-31  2013-09-30  2013-10-31
group_month                         
2013-05-01  1   1   1   0   0   0
2013-06-01  0   1   1   1   2   2

但是,我们可以得到您需要的值,如下所示。


a = data.set_index('login_month').groupby('id').resample('M').last().ffill().drop('id', axis=1).reset_index()
pd.DataFrame(a[(a['login_month'] >= a['group_month'])].groupby(['group_month', 'login_month'])['id'].count()).unstack().fillna(method='ffill',axis=1).fillna(value=0)

输出

login_month     2013-05-31  2013-06-30  2013-07-31  2013-08-31  2013-09-30  2013-10-31
group_month                         
2013-05-01  1.0     1.0     1.0     1.0     1.0     1.0
2013-06-01  0.0     1.0     1.0     1.0     2.0     2.0

【讨论】:

您好,感谢您的回答!但结果与经典保留相同。我将向数据集添加一些数据,也许我的问题不清楚

以上是关于用Python计算滚动保留[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用“(”和“)”拆分字符串并保留分隔符(Python)[重复]

python中list中怎么删除重复数据保留一条

计算重复值,删除重复并保留计数和其他列

在屏幕上滚动和返回时如何保留 UITableViewCell 的选定状态

Python:拆分字符串,尊重并保留引号[重复]

如何在 ExtJS 4 网格面板中保留垂直滚动条?