Pandas: что эквивалентно группе SQL, имея?

Какой наиболее эффективный способ использовать groupby и параллельно применять фильтр в pandas?

В основном я запрашиваю эквивалент в SQL

select *
...
group by col_name
having condition

Я думаю, что существует много случаев использования, начиная от условных средств, сумм, условных вероятностей и т.д., что сделало бы такую ​​команду очень мощной.

Мне нужна очень хорошая производительность, поэтому в идеале такая команда не будет результатом нескольких многоуровневых операций, выполняемых в python.

Ответы

Ответ 1

Как упоминалось в комментарии unutbu, групповой фильтр является эквивалентом SQL HAVING:

In [11]: df = pd.DataFrame([[1, 2], [1, 3], [5, 6]], columns=['A', 'B'])

In [12]: df
Out[12]:
   A  B
0  1  2
1  1  3
2  5  6

In [13]: g = df.groupby('A')  #  GROUP BY A

In [14]: g.filter(lambda x: len(x) > 1)  #  HAVING COUNT(*) > 1
Out[14]:
   A  B
0  1  2
1  1  3

Вы можете написать более сложные функции (они применяются к каждой группе), если они возвращают простой ol 'bool:

In [15]: g.filter(lambda x: x['B'].sum() == 5)
Out[15]:
   A  B
0  1  2
1  1  3

Примечание: возможно, есть ошибка, в которой вы не можете написать функцию, действующую на столбцы, которые вы использовали для группировки... Обходной путь группировать по столбцам вручную, т.е. g = df.groupby(df['A'])).