为了账号安全,请及时绑定邮箱和手机立即绑定

用Python计算滚动保留

用Python计算滚动保留

慕姐8265434 2022-05-19 18:32:15
我在计算滚动保留时遇到问题。我试图弄清楚如何使 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 |+-------------+---------+---------+---------+---------+---------+---------+
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

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


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


查看完整回答
反对 回复 2022-05-19
  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信