February 1, 2021

Агрегирование данных по индексам с 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()

В результате получим:

Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях:

Instagram

Яндекс Дзен

Telegram