我正在为工作执行流失分析,并且一直在尝试在现有数据框架的基础上创建多索引数据框架。
我目前有一个类似如下的Dataframe结构:
df.head(3)
CustomerID Lifetime Cohort Monthly_Pay Ltv_Rev Sub Pln_strt pln Can
----------------------------------------------------------------------------
fgvghc 10 2010-5 14.99 150 2010-5 2010-5-3 2011-5-3
dhsdjk 2 2010-5 14.99 179 2010-5 2010-5-9 2010-7-8
5uk0ez 3 2010-6 5.99 18 2010-6 2010-6-4 2010-8-2我正在试图弄清楚每个队列在20个月内的流失情况。cohort列就是cohort本身,subscribe列标记保留的用户总数的月份。示例如下:
Total_Users
Cohort Subscribe
-------------------------------
2010-5 2010-5 2
2010-6 2
2010-7 1
...到目前为止,我一直在尝试:
grouped = df.groupby(['Cohort', 'Subscribe'])
grouped.agg({'CustomerID': pd.Series.nunique})但这不起作用;它只打印每个队列中的总用户,而没有真正区分队列和订阅列:
Total_Users
Cohort Subscribe
-------------------------------
2010-5 2010-5 2
2010-6 2010-6 4
2010-7 2010-7 12 我也试过了:
grouped = df.groupby(['Cohort', 'Subscribe'])['CustomerID'].size()但这会打印出上面的结果,但在一系列范围内。
更新:为了节省空间,我没有发布我的实际数据帧,但现在我意识到我遗漏了可能重要的信息。我添加了计划开始日期和计划取消日期。
我认为,每个队列的映射保留问题源于对CustomerID、总客户生命周期以及开始和取消日期的不正确利用方式。
有人能帮到菜鸟吗?...作为参考,我一直将此作为指南。http://www.gregreda.com/2015/08/23/cohort-analysis-with-python/
发布于 2018-04-01 23:54:28
看起来你需要使用size()
import pandas as pd
df = pd.DataFrame([['fgvghc', 10, '2010-5', 14.99, 150, '2010-5'],
['dhsdjk', 12, '2010-5', 14.99, 179, '2010-5'],
['akdsfj', 12, '2010-5', 14.99, 179, '2010-6'],
['5uk0ez', 3, '2010-6', 5.99, 17.97, '2010-6']],
columns=['Customer_ID', 'Lifetime', 'Cohort',
'Monthly_Payment', 'Lifetime_Rev', 'Subscribed'])
res = df.groupby(['Cohort', 'Subscribed'])['Customer_ID'].size()结果:
Cohort Subscribed
2010-5 2010-5 2
2010-6 1
2010-6 2010-6 1
Name: Customer_ID, dtype: int64https://stackoverflow.com/questions/49592636
复制相似问题