Поэтому я пытаюсь создать функцию, которая позволила бы мне быстро создать сводную таблицу на основе ряда факторов.Однако каждый раз, когда я запускаю его, функция не удаляет индекс, который, в свою очередь, не агрегирует данные. Например,
Вот один из кадров, с которыми я работал
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
У меня была эта проблема пару раз.
Любойзнаете, что я делаю не так?