Создать новый столбец на основе соответствующих значений двух существующих столбцов - PullRequest
0 голосов
/ 29 апреля 2018

У меня было два фрейма данных, которые я объединил на основе идентификатора пользователя и получил следующий фрейм данных, что хорошо:

junkdf = df = DataFrame({'User_ID': [340,558,558,558,983,422,100,740,740],
'Transaction_Type_x': ['Purchase', 'Purchase', 'Purchase', 'Purchase', 'Purchase', 'Purchase', 'Purchase', 'Purchase', 'Purchase'],
'Rev/Payout_x': [50, 20, 20,28,37,50,40,50,55],
'Cohort_x': ['2010-01','2010-01','2010-02','2010-2','2010-02','2010-02','2010-03','2010-04','2010-04'],
'Transaction_Type_y': ['Sale','Sale','Sale','Sale','Sale','Sale','Sale','Sale','Sale'],
 'Rev/Payout_y': [33,42,66,69,100,22,19,98,39],
 'Cohort_y' : ['2010-03','2010-01','2010-01','2010-04','2010-04','2010-02','2010-01','2010-03','2010-02']})  

junkdf2 =junkdf[['User_ID','Transaction_Type_x','Rev/Payout_x','Cohort_x', 
'Transaction_Type_y','Rev/Payout_y','Cohort_y']]
junkdf2

Мне было интересно, смогу ли я использовать функцию groupby для создания мультииндексного фрейма данных, в котором общие значения cohort_x и cohort_y объединяются для создания нового столбца с именем 'Cohort.

Затем я мог бы использовать .agg, чтобы подсчитать общее количество пользователей, которые купили что-то в этом месяце (total_users_x), и количество, которые продали что-то в этом месяце, и суммировать доход для x и y. В идеале это выглядело бы примерно так:

            Total_Users_x  Rev/Payout_x  total_user_y  Rev/Payout_y
Cohort
2010-01          2             70             3           132
2010-02          x             x              x            x
2010-03          x             x              x            x
2010-04          x             x              x            x

1 Ответ

0 голосов
/ 29 апреля 2018

IIUC Используя wide_to_long, чтобы увеличить ваш df, затем мы используем agg с groupby + unstack, чтобы вычислить и отформатировать результат

s=pd.wide_to_long(junkdf2[['Cohort_x','Cohort_y','Rev/Payout_x','Rev/Payout_y']].reset_index().reset_index(),stubnames=['Rev/Payout','Cohort'],i=['index','User_ID'],j='xory',sep='_',suffix='\w+').set_index('Cohort',append=True)
s.reset_index(inplace=True)

s.groupby(['Cohort','xory']).agg({'Rev/Payout':'sum','User_ID':'nunique'}).unstack()
Out[298]: 
        User_ID    Rev/Payout     
xory          x  y          x    y
Cohort                            
2010-01       2  2         70  127
2010-02       3  2        135   61
2010-03       1  2         40  131
2010-04       1  2        105  169
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...