首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python计算滚动保持率

用Python计算滚动保持率
EN

Stack Overflow用户
提问于 2019-09-06 01:48:48
回答 1查看 1.2K关注 0票数 1

我在计算滚动保持力方面有困难。

我试着想办法让团队工作,但它似乎只适合于计算经典的保留。

滚动保留-每个组中登录确切月或之后的用户数量。

代码语言:javascript
复制
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']} 

转换数据:

代码语言:javascript
复制
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')

要计算经典的保留量(统计每个登录月份的用户数),我使用了以下代码:

代码语言:javascript
复制
classic_ret = pd.DataFrame(data[(data['login_month'] >= data['group_month'])].groupby(['group_month', 'login_month'])['id'].count())

classic_ret.unstack()

滚动保持力应具有以下输出:

代码语言:javascript
复制
+-------------+---------+---------+---------+---------+---------+---------+
| 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 |
+-------------+---------+---------+---------+---------+---------+---------+
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-06 01:53:43

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

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57814776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档