我想在一个大的Pandas数据帧(数百万行)上执行汇总操作(求和),这些操作是由若干个固定列(最多10列)上的条件确定的。这些列仅包含整数值。
我的问题是,我必须执行这个操作(查询+汇总)数千次(〜100,000次)。我认为关于聚合部分没有太多需要优化的内容,因为它只是一个简单的求和。有没有办法在我的条件列上建立一个“索引”,以加快每个查询的速度?
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 RAM),这个操作只需要不到一秒钟的时间(926毫秒,使用%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' ...])
all()
或者and
?您能否同时使用算术运算符来测试几个条件? - RobertoDataFrame.query()
和DataFrame.eval()
的绝佳示例。请尝试它并告诉我们效果如何! - Phillip Cloud