我正在为工作执行流失分析,我一直在尝试根据现有数据框创建一个多索引数据框。
我目前有一个类似于此的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个月内的流失。群组列是群组本身,而订阅列标记了保留总用户数的月份。示例如下:
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/
答案 0 :(得分:0)
您似乎需要使用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: int64