#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