pandas

Агрегатные функции в pandas

Опубликовано

В этой главе мы поговорим о агрегатных функциях в библиотеке pandas. Агрегатные функции это способ получить статистику из группы входных данных в виде одного числа. В основном статистические данные включают такие показатели как: среднее значение, медиану и стандартное отклонение. Вы также узнаете, как преобразовать DataFrame в сводную таблицу, что является отличным способом сравнения данных в двух измерениях.

Сбор статистики по колонке.

Наш dataframe содержит колонку Model, в которой имеются повторяющиеся значения и для того чтобы посчитать сколько в нашей таблице уникальных значений, можно воспользоваться методом nunique().

print(df.Model.nunique())

А для того чтобы получить эти самые значения, используйте метод unique().

unique = df.Model.unique() 
print(unique)

Общий синтаксис для всех методов одинаков. Сначала обращаемся к столбцу и через точку применяем один из следующих методов.

методописание
mean()среднее арифметическое среди всех значений в колонке
std()среднее отклонение от среднего арифметического значения
median()медиана (значение находящееся в середине среди упорядоченного списка)
max()максимальное значение в колонке
min()минимальное значение в колонке
count()количество значений в колонке
unique()перечень уникальных значений
nunique()количество уникальных значений

Группировка данных

Давайте представим себе такую задачу. В таблице представлены несколько моделей телефонов, но стоимость каждого из них отличается в зависимости от объёма памяти. Как получить среднюю стоимость за каждую представленную линейку моделей телефонов? Или узнать стоимость самого дорого телефона в каждой линейке? Можно написать сложные алгоритмы по отбору каждой модели и расчёту средней стоимости, но pandas предлагает более элегантное решение.

mean = df.groupby('Model').cost.mean()
print(mean)

Сначала мы сгруппируем (свернём) таблицу по одинаковым значениям в стобце Model. А затем к столбцу cost в разрезе сгруппированных значений применим метод mean(), который покажет нам среднее арифметическое для каждого свёрнутого значения.

Синтаксис имеет следующий вид df.groupby(столбец_для_группировки).столбец_по_которому_получим_результат.метод_расчёта_результата()

Однако, если вы обратите внимание, в результате метода groupby() нам вернётся объект класса Series, а если мы хотим получить новый DataFrame, нужно применить метод reset_index(). Тогда мы снова сможем работать с получившейся выборкой как с отдельным DataFrame.

Давайте получим таблицу со стартовыми ценами на каждую линейку телефона.

start_price = df.groupby('Model').cost.min().reset_index()
print(start_price)

Группировать можно сразу по нескольким полям. Для этого в метод groupby() нужно передать список столбцов, по которым вы хотите произвести свёртку.

new_df = df.groupby(['size_of_storage', 'camera']).id.count().reset_index()

Данный код свернёт данные по уникальным значениям Размера хранилища и камеры. И в разрезе этих значений мы посчитаем сколько моделей представлено.

Переименуем поле id так как оно не отображает суть информации которая хранится в этом столбце.

new_df.rename(columns={'id':'count_of_model'}, inplace=True)

Сводные таблицы

Когда мы группируем данные по нескольким полям, иногда удобно отображать полученный результат в немного другой форме. В данном случае успешно будет применить шахматку.

pivot_count_of_model = new_df.pivot(
    columns='camera',
    index='size_of_storage',
    values='count_of_model'
).reset_index()
print(pivot_count_of_model)

columns — то что будет отображаться в колонках
index — что будет располагаться в рядах
values — значения, которые будут располагаться на пересечении ряд-столбец.

Добавить комментарий

Ваш адрес email не будет опубликован.