Pandas: як групувати та агрегувати в кількох стовпцях


Часто вам може знадобитися згрупувати та об’єднати кілька стовпців pandas DataFrame.

На щастя, це легко зробити за допомогою функцій pandas .groupby() і .agg() .

Цей посібник пояснює кілька прикладів практичного використання цих функцій.

Приклад 1: згрупуйте за двома стовпцями та знайдіть середнє значення

Припустімо, що у нас є наступні pandas DataFrame:

 import pandas as pd

#createDataFrame
df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})

#view DataFrame
print (df)

  team position assists rebounds
0 AG 5 11
1 BG 7 8
2 BF 7 10
3 BG 8 6
4 BF 5 6
5 MF 7 9
6 MC 6 6
7 MC 9 10

Наступний код показує, як згрупувати стовпці «команда» та «позиція» та знайти середні результати:

 df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index ()


        team position assists
                          mean
0 A G 5.0
1 B F 6.0
2 B G 7.5
3 M C 7.5
4M F 7.0

Результат говорить нам:

  • Середня результативність для гравців на позиції G команди A становить 5,0 .
  • Середня результативність для гравців на позиції F у команді B становить 6,0 .
  • Середня результативність для гравців на позиції G команди B становить 7,5 .

І так далі.

Ми також можемо використати наступний код, щоб перейменувати стовпці отриманого DataFrame:

 #group by team and position and find mean assists
new = df. groupby (['team', 'position']). agg ({'assists': ['mean']}). reset_index ()

#rename columns
new.columns = ['team', 'pos', 'mean_assists']

#view DataFrame
print (new)

	team pos mean_assists
0 A G 5.0
1 B F 6.0
2 B G 7.5
3 M C 7.5
4M F 7.0

Приклад 2: групування за двома стовпцями та пошук кількох статистичних даних

Припустімо, що ми використовуємо той самий pandas DataFrame, що й у попередньому прикладі:

 import pandas as pd

#createDataFrame
df = pd.DataFrame({'team': ['A', 'B', 'B', 'B', 'B', 'M', 'M', 'M'],
                   'position': ['G', 'G', 'F', 'G', 'F', 'F', 'C', 'C'],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10]})

У наступному коді показано, як знайти середню та максимальну кількість підбирань, згрупованих у стовпцях «команда» та «позиція».

 df. groupby (['team', 'position']). agg ({'rebounds': ['median', 'max']}). reset_index ()


        team position rebounds
                         median max
0 A G 11 11
1 B F 8 10
2 B G 7 8
3 M C 8 10
4 M F 9 9

Результат говорить нам:

  • Середня кількість підбирань для гравців на позиції G команди А становить 11 .
  • Максимальна кількість підбирань для гравців на позиції G команди A становить 11 .
  • Середня кількість підбирань гравців на позиції F команди B становить 8 .
  • Максимальна кількість підбирань для гравців на позиції F команди B становить 10 .

І так далі.

Додаткові ресурси

Як відфільтрувати Pandas DataFrame за кількома умовами
Як підрахувати відсутні значення в Pandas DataFrame
Як скласти кілька Pandas DataFrames

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *