В этом руководстве мы рассмотрим группировку и сортировку.
Карты позволяют нам преобразовывать данные в DataFrame или Series по одному значению за раз для всего столбца. Однако часто мы хотим сгруппировать наши данные, а затем сделать что-то конкретное для группы, в которой находятся данные.
Мы делаем это с помощью операции groupby()
.
Групповой анализ:
Мы можем воспроизвести то, что делает value_counts()
, выполнив следующие действия:
reviews.groupby('points').points.count()
groupby()
создал группу отзывов, в которых данным винам были присвоены одинаковые баллы. Затем для каждой из этих групп мы взяли столбец points()
и подсчитали, сколько раз он появился. value_counts()
— это просто ярлык для этой groupby()
операции.
Мы можем использовать любую из сводных функций, которые мы использовали ранее с этими данными. Например, чтобы получить самое дешевое вино в каждой категории стоимости в баллах, мы можем сделать следующее:
reviews.groupby('points').price.min()
Каждая группа, которую мы генерируем, представляет собой срез нашего DataFrame, содержащий только данные с совпадающими значениями. Этот DataFrame доступен нам напрямую с помощью метода apply()
, и затем мы можем манипулировать данными любым способом, который сочтем нужным. Например, вот один из способов выбора названия первого проверенного вина каждой винодельни в наборе данных:
reviews.groupby('winery').apply(lambda df: df.title.iloc[0])
сначала мы используем groupby в столбце винодельни, это создаст группу для каждого элемента винодельни, затем мы применяем лямбда-функцию, которая извлекает первый заголовок данного DataFrame, созданного с помощью groupby.
Мы также можем группировать по более чем одному столбцу. Например, вот как мы выбираем лучшее вино по стране и провинции:
reviews.groupby(['country', 'province']).apply(lambda df: df.loc[df.points.idxmax()])
Вот как будет выглядеть новый фрейм данных:
Одним из лучших методов метода groupby()
function является agg()
, который позволяет вам одновременно запускать множество различных функций в вашем DataFrame. Например, мы можем создать простую статистическую сводку набора данных следующим образом:
reviews.groupby(['country']).price.agg([len, min, max])
Это добавит три столбца к результирующему фрейму данных, содержащему длину, минимум и максимум столбцов цены.
Сортировка:
Если мы напечатаем значения в countries_reviewed
DataFrame, мы увидим, что группировка возвращает данные в порядке индекса, а не в порядке значений. То есть при выводе результата groupby
порядок строк зависит от значений в индексе, а не в данных.
Чтобы получить данные в нужном порядке, мы можем отсортировать их самостоятельно. Для этого удобен метод sort_values()
:
# first we reset the index countries_reviewed = countries_reviewed.reset_index() # then we use the sort_values method that takes the "by" argument # specifying the feature we are going to use to arrange the values countries_reviewed.sort_values(by='len', ascending=False)
Восходящий аргумент ( по умолчанию True ) позволяет нам указать порядок сортировки.
Для сортировки по значениям индекса используйте сопутствующий метод sort_index()
. Этот метод имеет те же аргументы и порядок по умолчанию:
countries_reviewed.sort_index()
Наконец, знайте, что вы можете сортировать более чем по одному столбцу одновременно:
countries_reviewed.sort_values(by=['country', 'len'])