Pandas: как сгруппировать по индексу и выполнить расчет


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

Метод 1: группировка по одному столбцу индекса

df.groupby('index1')['numeric_column']. max ()

Способ 2: группировка по нескольким столбцам индекса

df.groupby(['index1', 'index2'])['numeric_column']. sum ()

Способ 3: группировка по столбцу индекса и обычному столбцу

df.groupby(['index1', 'numeric_column1'])['numeric_column2']. nunique ()

В следующих примерах показано, как использовать каждый метод со следующим кадром данных pandas, который имеет MultiIndex:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
 'position': ['G', 'G', 'G', 'F', 'F', 'G', 'G', 'F', 'F', 'F'],
 'points': [7, 7, 7, 19, 16, 9, 10, 10, 8, 8],
 'rebounds': [8, 8, 8, 10, 11, 12, 13, 13, 15, 11]})

#set 'team' column to be index column
df.set_index(['team', 'position'], inplace= True )

#view DataFrame
df

 points rebounds
team position 
A G 7 8
 G 7 8
 G 7 8
 F 19 10
 F 16 11
B G 9 12
 G 10 13
 F 10 13
 F 8 15
 F 8 11

Метод 1: группировка по одному столбцу индекса

В следующем коде показано, как найти максимальное значение столбца «точки», сгруппированного по столбцу индекса «позиция»:

#find max value of 'points' grouped by 'position index column
df.groupby('position')['points']. max ()

position
F 19
G 10
Name: points, dtype: int64

Способ 2: группировка по нескольким столбцам индекса

В следующем коде показано, как найти сумму столбца «очки», сгруппированного по индексным столбцам «команда» и «позиция»:

#find max value of 'points' grouped by 'position index column
df.groupby(['team', 'position'])['points']. sum ()

team position
A F 35
 G 21
B F 26
 G 19
Name: points, dtype: int64

Способ 3: группировка по столбцу индекса и обычному столбцу

В следующем коде показано, как найти количество уникальных значений в столбце «Подборы», сгруппированных по индексному столбцу «Команда» и обычному столбцу «Очки»:

#find max value of 'points' grouped by 'position index column
df.groupby(['team', 'points'])['rebounds']. nunique ()

team points
A 7 1
 16 1
 19 1
B 8 2
 9 1
 10 1
Name: rebounds, dtype: int64

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Как подсчитать уникальные значения в Pandas
Как сгладить MultiIndex в Pandas
Как изменить одно или несколько значений индекса в Pandas
Как сбросить индекс в Pandas

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.