Pandas: вычислить std общего значения столбца за «год»

#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')) .