我想对大熊猫数据帧(数百万行)的行进行聚合操作(总和),这些行由几个固定列(最多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)})
Run Code Online (Sandbox Code Playgroud)
然后这样做
tmp = df[['A','B','nume1','nume2']].query('A > 0.5').groupby('B').sum().reset_index()[['B','nume1','nume2']]
Run Code Online (Sandbox Code Playgroud)
SQL 相当于
select B, sum(nume1),sum(nume2)
from df
where A > 0.5
group by B
Run Code Online (Sandbox Code Playgroud)
在我的中等(i7 四核,16GB 内存)机器上,这需要不到一秒(926 毫秒,使用 %timeit)。
我希望这有帮助。
归档时间: |
|
查看次数: |
2792 次 |
最近记录: |