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


Вы можете использовать следующий базовый синтаксис для выполнения эквивалента оператора SQL «GROUP BY HAVING» в pandas:

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

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

 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: Группа панд, имеющих Count

Следующий код показывает, как группировать строки на основе значения в столбце «Команда» , а затем фильтровать только команды, количество которых больше 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: как проверить, содержит ли столбец строку

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *