[英]Fastest way to query a dataframe
我想对大熊猫数据框(数百万行)的行进行聚合操作(求和),这取决于几个固定列(最多10列)上的条件。 这些列只有整数值。
我的问题是我必须使该操作(查询+汇总)成千上万次(约100000次)。 我认为对于聚合部分,没有什么要优化的,因为这只是一个简单的总和。 什么是执行此任务的最有效方法? 有什么办法可以在条件列上建立一个“索引”以加快每个查询的速度?
我会尝试这种口味的东西:
假设您具有以下数据框
N = 10000000
df = pd.DataFrame({
'A':np.random.binomial(1,0.5,N),
'B':np.random.binomial(2,0.5,N),
'nume1':np.random.uniform(0,1,N),
'nume2':np.random.normal(0,1,N)})
然后这样做
tmp = df[['A','B','nume1','nume2']].query('A > 0.5').groupby('B').sum().reset_index()[['B','nume1','nume2']]
是SQL的等效项
select B, sum(nume1),sum(nume2)
from df
where A > 0.5
group by B
在我的中等(i7四核,16GB内存)计算机上,这花费的时间不到一秒(926ms,使用%timeit)。
我希望这有帮助。
没有更多细节,很难回答您的问题。
您确实应该为条件列建立索引。
df['idx'] = (df['col1'] * df['col2']) ** (df['col3'] + df['col4']) * df['col5'] == 0.012
df = df.set_index('idx')
将条件重写到可索引的列可能很困难。 请记住,您可以将所有列设置为索引
df = df.set_index(['col1', 'col2', 'col3', 'col4', 'col5' ...])
有关Pandas中高级索引编制的文档,可以帮助您考虑问题: http : //pandas.pydata.org/pandas-docs/stable/indexing.html#multiindex-query-syntax
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.