#python #pandas #dataframe #standard-deviation #feature-engineering
#python #pandas #фрейм данных #стандартное отклонение #разработка функций
Вопрос:
У меня есть фрейм данных, представляющий проверки клиентов (посещения) ресторанов. year
это просто год, когда произошла регистрация в ресторане.
- Что я хочу сделать, так это добавить столбец
std_checkin
в мой исходныйdf
фрейм данных, который представляет стандартное отклонение посещений за год. Итак, мне нужно рассчитать стандартное отклонение для общего количества посещений в год.
data = {
'restaurant_id': ['--1UhMGODdWsrMastO9DZw', '--1UhMGODdWsrMastO9DZw','--1UhMGODdWsrMastO9DZw','--1UhMGODdWsrMastO9DZw','--1UhMGODdWsrMastO9DZw','--1UhMGODdWsrMastO9DZw','--6MefnULPED_I942VcFNA','--6MefnULPED_I942VcFNA','--6MefnULPED_I942VcFNA','--6MefnULPED_I942VcFNA'],
'year': ['2016','2016','2016','2016','2017','2017','2011','2011','2012','2012'],
}
df = pd.DataFrame (data, columns = ['restaurant_id','year'])
# total number of checkins per restaurant
d = df.groupby('restaurant_id')['year'].count().to_dict()
df['nb_checkin'] = df['restaurant_id'].map(d)
grouped = df.groupby(["restaurant_id"])
avg_annual_visits = grouped["year"].count() / grouped["year"].nunique()
avg_annual_visits = avg_annual_visits.rename("avg_annual_visits")
df = df.merge(avg_annual_visits, left_on="restaurant_id", right_index=True)
df.head(10)
Отсюда я не уверен, как написать то, что я хочу, с помощью pandas. Если требуются какие-либо разъяснения, пожалуйста, спросите.
Спасибо!
Ответ №1:
Я думаю, вы хотите сделать:
counts = df.groupby('restaurant_id')['year'].value_counts()
counts.std(level='restaurant_id')
Вывод для counts
, который равен общему количеству посещений ресторана в год:
restaurant_id year
--1UhMGODdWsrMastO9DZw 2016 4
2017 2
--6MefnULPED_I942VcFNA 2011 2
2012 2
Name: year, dtype: int64
И вывод для std
restaurant_id
--1UhMGODdWsrMastO9DZw 1.414214
--6MefnULPED_I942VcFNA 0.000000
Name: year, dtype: float64
Комментарии:
1. хм, хорошо, но как я могу добавить это к исходному фрейму данных df?
2.
df['annual_std'] = df['restaurant_id'].map(counts.std(level='restaurant_id'))
.