函数中的分组依据不能正确地分组依据

2024-09-27 07:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我尝试创建一个函数,它可以让我快速创建一个基于多个因素的透视表。但是,每次运行它时,函数都不会删除索引,而索引又不会聚合数据

例如,这里有一个我一直在使用的dframe

     User_ID    Trans_Type  Date      Revenue    Cohort    Month
0   958507335   Purchase    2013-02-01  22.0    2013-02   2013-02
1   77396089    Purchase    2013-02-01  50.0    2013-02   2013-04
2   168623910   Sale        2013-02-01  20.0    2013-02   2013-02
3   124390583   Sale        2013-02-01  53.0    2013-02   2013-03
4   312221573   Sale        2013-02-01  160.0   2013-02   2013-04
5   767171090   Sale        2013-02-01  56.0    2013-02   2013-04
6   328835282   Sale        2013-02-01  76.0    2013-02   2013-02
7   289850608   Sale        2013-02-01  27.0    2013-02   2013-06
8   926145734   Sale        2013-02-01  16.0    2013-02   2013-02
9   950422305   Sale        2013-02-01  49.0    2013-02   2013-04

基本上,有两种交易类型。买卖

下面是我用来创建透视表的函数

x = 'Sale'
df = df.set_index('User_ID', inplace=True)

def LTV_calc_(df):
    df1 = df[df['Transaction_Type'] == x]
    #Convert to a pivot table
    df2 = df1.groupby(['Cohort','Month'])
    df3 = df2.agg({'User_ID': ['count'],
               'Revenue': ['sum']})

    return df3
Sales = df.groupby(level=0).apply(LTV_calc_)

现在当我运行Sales DF时,结果是这样的:

                      User_ID Revenue
                      count   sum
        Cohort  Month       
16940   2013-02 2013-02  1  59.0
16941   2013-02 2013-02  1  62.0
16942   2013-04 2013-04  1  288.0
16943   2013-02 2013-02  1  33.0
16944   2013-05 2013-05  1  14.0
16945   2013-03 2013-03  1  0.0

每当我在没有函数的情况下运行代码时,它都会正确地产生以下结果:

               User_ID  Rev/Payout
               count    sum
Cohort  Month       
2013-02 2013-02  293   8449.0
        2013-03  41    1208.0
        2013-04  52    1708.0
        2013-05  55    2469.0
        2013-06  62    2911.0

我以前也有过这个问题

有人知道我做错了什么吗


Tags: 函数iddftypecountcalcsalepurchase
1条回答
网友
1楼 · 发布于 2024-09-27 07:28:37

无需调用groupby().apply(),只需调用函数即可进行计算

import pandas as pd

x = 'Sale'

def LTV_calc_(df):
    return df[df['Trans_Type'] == x].groupby(['Cohort','Month']).agg({'User_ID': ['count'],
               'Revenue': ['sum']})

Sales = LTV_calc_(df)

df
Out[79]: 
     User_ID Trans_Type        Date  Revenue   Cohort    Month
0  958507335   Purchase  2013-02-01     22.0  2013-02  2013-02
1   77396089   Purchase  2013-02-01     50.0  2013-02  2013-04
2  168623910       Sale  2013-02-01     20.0  2013-02  2013-02
3  124390583       Sale  2013-02-01     53.0  2013-02  2013-03
4  312221573       Sale  2013-02-01    160.0  2013-02  2013-04
5  767171090       Sale  2013-02-01     56.0  2013-02  2013-04
6  328835282       Sale  2013-02-01     76.0  2013-02  2013-02
7  289850608       Sale  2013-02-01     27.0  2013-03  2013-06
8  926145734       Sale  2013-02-01     16.0  2013-03  2013-02
9  950422305       Sale  2013-02-01     49.0  2013-04  2013-04

Sales
Out[80]: 
                User_ID Revenue
                  count     sum
Cohort  Month                  
2013-02 2013-02       2    96.0
        2013-03       1    53.0
        2013-04       2   216.0
2013-03 2013-02       1    16.0
        2013-06       1    27.0
2013-04 2013-04       1    49.0

相关问题 更多 >

    热门问题