所以我试图创建一个可以让我根据许多因素快速创建数据透视表的函数。但是,每次运行它时,该函数都不会丢弃索引,而索引又不会聚合数据。
例如,这是我一直在使用的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
我曾经有过这个问题。
任何人都知道我做错了什么?
答案 0 :(得分:1)
无需调用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