在 pandas 中使用 groupby 并并行应用过滤器的最有效方法是什么?
基本上我要求 SQL 中的等效项
select *
...
group by col_name
having condition
我认为有很多用例,包括条件均值、总和、条件概率等,这将使这样的命令非常强大。
我需要非常好的性能,所以理想情况下这样的命令不会是在 python 中完成的多个分层操作的结果。
正如 unutbu 的评论中提到的,groupby 的过滤器 http://pandas.pydata.org/pandas-docs/stable/groupby.html#filtration相当于 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
Note: 可能存在错误 https://github.com/pydata/pandas/issues/6512您无法编写函数来对您用于分组的列进行操作...解决方法是手动对列进行分组,即g = df.groupby(df['A']))
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)