Pandas: проста формула для «групування за активами»


Ви можете використовувати наступний базовий синтаксис, щоб виконати еквівалент оператора SQL “GROUP BY HAVING” у pandas:

 df. groupby (' some_column '). filter ( lambda x: some condition)

Наступні приклади показують, як використовувати цей синтаксис на практиці з наступними pandas DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
                   ' position ': ['G', 'F', 'F', 'G', 'F', 'F', 'G', 'G'],
                   ' points ': [30, 22, 19, 14, 14, 11, 20, 28]})

#view DataFrame
print (df)

  team position points
0 AG 30
1 AF 22
2 FY 19
3 BG 14
4 BF 14
5 BF 11
6 GC 20
7 GC 28

Приклад 1: Група панд, що мають із Графом

У наступному коді показано, як групувати рядки на основі значення в стовпці «Команда» , а потім фільтрувати лише команди, кількість яких перевищує 2:

 #group by team and filter for teams with count > 2
df. groupby (' team '). filter ( lambda x: len (x) > 2 )


        team position points
0 A G 30
1 A F 22
2 A F 19
3 B G 14
4 B F 14
5 B F 11

Зауважте, що повертаються лише рядки зі значенням команди «A» або «B», оскільки це обидві команди, кількість яких перевищує 2.

Приклад 2: Група панд із середнім

У наступному коді показано, як групувати рядки на основі значення в стовпці «Команда» , а потім фільтрувати лише команди, середнє значення яких перевищує 20:

 #group by team and filter for teams with mean points > 20
df. groupby (' team '). filter ( lambda x: x[' points ']. mean () > 20 )

        team position points
0 A G 30
1 A F 22
2 A F 19
6 C G 20
7 C G 28

Зверніть увагу, що повертаються лише рядки зі значенням команди «A» або «C», оскільки ці дві команди мають середнє значення балів більше 20.

Приклад 3: Група панд із сумою

У наведеному нижче коді показано, як групувати рядки за значенням у стовпці «Команда» , а потім фільтрувати лише команди, сума балів яких дорівнює рівно 48:

 #group by team and filter for teams with sum of points equal to 48
df. groupby (' team '). filter ( lambda x: x[' points ']. sum () == 48 )

        team position points
6 C G 20
7 C G 28

Зауважте, що повертаються лише рядки зі значенням команди «C», оскільки це єдина команда, яка має суму балів 48.

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

У наступних посібниках пояснюється, як виконувати інші типові операції в pandas:

Pandas: отримати індекс рядків, стовпець яких відповідає значенню
Pandas: як вибрати стовпці, що містять певний рядок
Pandas: як перевірити, чи містить стовпець рядок

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

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