Как рассчитать средние значения по группам других типов значений?

#python #python-3.x #pandas #dataframe

Вопрос:

У меня есть фрейм данных:

 id     day      action_type
1       0        upload     
1       0        upload 
1       0        upload 
1       1        upload 
1       1        upload 
2       0        upload 
2       0        upload 
2       1        upload 
 

Как изменить мой запрос, чтобы получить таблицу с уникальными днями в столбце день и средним числом «загрузить» action_type среди всех идентификаторов. Поэтому желаемый результат должен выглядеть так:

 day     avg_num_action
0        2.5 
1        1.5
 

Это 2.5, потому что (3 2)/2 (3 загрузки идентификатора:1 и 2 загрузки для идентификатора:2). то же самое для 1.5

Как это сделать в панд?

Ответ №1:

Попробуй crosstab

 pd.crosstab(df.id, df.day).mean()
 

Комментарии:

1. Я думаю, что это mean() не должно быть mean(1)

2. @sammywemmy, ты можешь проверить еще раз ?

3. вы его отредактировали? похоже, никаких изменений не произошло. id по — прежнему является индексом, а не day

4. @sammywemmy обновление, спасибо

Ответ №2:

Предполагая df , что это ваш фрейм данных:

 df.groupby(['day', 'id']).count().groupby('day').mean()
 

Ответ №3:

С помощью groupby и откупоривайте:

 result = df.groupby(['id', 'day']).size().unstack('day').mean()
result 
day
0    2.5
1    1.5
dtype: float64

 

Чтобы соответствовать ожидаемому результату,добавьте reset_index:

 result.reset_index(name = 'avg_num_action')
 
   day  avg_num_action
0    0             2.5
1    1             1.5