因此,我尝试创建一个函数,它可以让我快速创建一个基于多个因素的透视表。但是,每次运行它时,函数都不会删除索引,而索引又不会聚合数据
例如,这里有一个我一直在使用的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
我以前也有过这个问题
有人知道我做错了什么吗
无需调用groupby().apply(),只需调用函数即可进行计算
相关问题 更多 >
编程相关推荐