pandas groupby и агрегируйте два столбца для соответствующих итогов, затем рассчитайте коэффициент - суммируйте итоги - PullRequest
0 голосов
/ 09 мая 2018

У меня есть следующие данные

user_id   session_id    youtube_id 
1           1             2342 
1           1             3523
1           2             3325
2           1             3423
2           1             2352
2           1             3333 
2           2             2351
2           2             9876
2           3             2388

Цель состоит в том, чтобы сгруппировать по user_id и рассчитать как total_sessions, total_views на пользователя, так и average views per session.

user_id, total_sessions, total_views, average_view_per_session
1,         2,            3,           1.5
2,         3,            6,           2    

 result_df['avg'] = df.groupby('user_id').agg({
     'session_id':lambda x : x.nunique(),
     'youtube_id': 'count'}).apply(lambda x : x['total_views']/x['total_sessions']

Две проблемы с выше:

  1. результирующие столбцы по-прежнему называются session_id и youtube_id, хотя они являются агрегациями
  2. как выполнить division, чтобы получить average_view_per_session?

Приведенный выше подход дает ключевую ошибку, которая может быть связана с использованием исходного имени столбца для агрегированных столбцов.

1 Ответ

0 голосов
/ 09 мая 2018

Поскольку они зависят друг от друга, мы можем добавить его в отдельную строку кода после применения .agg ().

Как насчет этого ( полный пример )

import pandas as pd

data = '''\
user_id   session_id    youtube_id 
1           1             2342 
1           1             3523
1           2             3325
2           1             3423
2           1             2352
2           1             3333 
2           2             2351
2           2             9876
2           3             2388'''

df = pd.read_csv(pd.compat.StringIO(data), sep='\s+')

df = df.groupby('user_id').agg({'session_id': 'nunique', 'youtube_id': 'count'})
df.columns = ['total sessions','total views']

df['average view per session'] = df['total views']/df['total sessions']

print(df)

Возвращает:

         total sessions  total views  average view per session
user_id                                                       
1                     2            3                       1.5
2                     3            6                       2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...