什么是SQL“GROUP BY HAVING”对Pandas的等价物?

2024-10-06 13:36:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在pandas中使用groupby和并行应用过滤器的最有效方法是什么?

基本上我要的是

select *
...
group by col_name
having condition

我认为有许多用例,从条件平均数、和、条件概率等,都会使这样的命令非常强大。

我需要一个非常好的性能,所以理想情况下,这样的命令不会是在python中完成的几个分层操作的结果。


Tags: 方法name命令过滤器pandasbygroupcol
1条回答
网友
1楼 · 发布于 2024-10-06 13:36:05

如联合国大学的评论所述,groupby's filter相当于SQL具有:

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

注意:potentially there is a bug在这里,您不能编写函数来对用于分组的列执行操作。。。解决方法是手动按列分组,即g = df.groupby(df['A']))

相关问题 更多 >