熊猫:有什么相当于SQL组?

Man*_*gia 36 python pandas pandas-groupby

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

基本上我要求SQL中的等价物

select *
...
group by col_name
having condition
Run Code Online (Sandbox Code Playgroud)

我认为有很多用例,包括条件均值,总和,条件概率等,这些都会使这样的命令非常强大.

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

And*_*den 48

正如unutbu的评论中所提到的,groupby的过滤器相当于SQL'S 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
Run Code Online (Sandbox Code Playgroud)

您可以编写更复杂的函数(这些函数应用于每个组),前提是它们返回一个普通的ol'bool:

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

注意:可能有一个错误,你不能写你的功能来处理你曾经用于分组的列...一个解决方法是手动分组列即ie g = df.groupby(df['A'])).

  • 只是链em(但你需要第二个groupby):``DataFrame([[1,2],[1,3],[2,5],[2,8],[5,6]],列= ['A','B']).groupby('A').filter(lambda x:len(x)> 1).groupby('A').sum()`` (3认同)