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