Агрегирование данных по индексам с Python
Работая с большими таблицами, зачастую сталкиваешься с задачей группировки записей с последующим подсчетом некоторых описательных статистик. О том, как это делать и пойдет речь в данной статье.
В демонстрационных целях будем использовать набор объявлений о продажах квартир в Республике Северная Осетия-Алания, имеющий следующий вид (показан только фрагмент таблицы):
Разобьем сведения об общей площади, как рассказывалось в статье, на группы, различающихся в 5 кв.м., начиная от 10. А затем проиндексируем записи группой площади, к которой они относятся и временем публикации:
# устанавливаем date_time в качестве индекса
df = df.set_index(['date_time'])
# преобразуем в подневный период (отбрасываем время)
df = df.to_period('D')
# формируем список границ площадей и создаем столбец, задающий для #каждой квартиры полуинтервал площадей, к которому она относится
sqs = np.hstack([np.arange(10,140,5),np.array([1000])])
df['sq_grs'] = pd.cut(df['total_square'],sqs)
sq_grps2int = {item:i for i, item in enumerate(df['sq_grs'].unique())}
# заменяем полуинтервалы целыми числами для простоты работы и #адресации данных
df['sq_grs'] = df['sq_grs'].map(sq_grps2int)
df=df.reset_index()
# задаем индекс из двух столбцов для каждой записи
df = df.set_index(['date_time', 'sq_grs'])
В результате получаем таблицу следующего вида:
Значения столбца sq_grs соответствуют полуинтервалам диапазонов площадей:
Теперь можно выполнить операции группирования по индексу и вывести для каждого столбца, например, среднее арифметическое:
df_grs = df.groupby(level=[0,1]).mean()
Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: