使用Pandas计算客户生命周期

时间:2018-03-22 06:16:37

标签: python pandas

我正在使用python执行同类群组分析,而我在创建一个新列时遇到了问题,该列总结了用户与我们共同停留的总月数。

我知道答案背后的数学,我所要做的就是:

  1. 减去从他们开始时取消我们服务的年份
  2. 乘以12。
  3. 减去他们从启动服务时取消服务的月份。
  4. 将这两个数字加在一起。
  5. 所以在Excel中,它看起来像这样:

    =(YEAR(C2)-YEAR(B2))* 12 +(MONTH(C2)-MONTH(B2))

    C是客户取消日期,B是他们开始的时间

    问题是我是Python和Pandas的新手,我在Python中翻译该函数时遇到了麻烦

    到目前为止我尝试过:

    df['Lifetime'] = df.Plan_Cancel_Date('%Y') - df.Plan_Start_Date('%Y')*12 + 
    df.Plan_Cancel_Date('%m') - df.Plan_Start_Date('%m')
    df.head()
    

    它返回错误'系列'是不可赎回的,我对这意味着什么有一般性的了解。

    然后我尝试了:

    def LTVCalc (Plan_Start_Date, Plan_Cancel_Date):
        df['Lifetime'] = df.Plan_Cancel_Date('%Y') - df.Plan_Start_Date('%Y')*12 + 
        df.Plan_Cancel_Date('%m') - df.Plan_Start_Date('%m')
    df.head()
    

    但是,这并没有增加专栏#39; Lifetime'到DataFrame。

    任何能够帮助新秀的人都会?

1 个答案:

答案 0 :(得分:1)

我认为需要先转换to_datetime,然后再使用dt.yeardt.month

df = pd.DataFrame({
    'Plan_Cancel_Date': ['2018-07-07','2019-03-05','2020-10-08'],
    'Plan_Start_Date': ['2016-02-07','2017-01-05','2017-08-08']
})
#print (df)

#if necessary convert to datetimes
df.Plan_Start_Date = pd.to_datetime(df.Plan_Start_Date)
df.Plan_Cancel_Date = pd.to_datetime(df.Plan_Cancel_Date)

df['Lifetime'] = ((df.Plan_Cancel_Date.dt.year - df.Plan_Start_Date.dt.year)*12 + 
                   df.Plan_Cancel_Date.dt.month - df.Plan_Start_Date.dt.month)

print (df)

  Plan_Cancel_Date Plan_Start_Date  Lifetime
0       2018-07-07      2016-02-07        29
1       2019-03-05      2017-01-05        26
2       2020-10-08      2017-08-08        38