删除groupby并优化代码

2024-09-24 02:26:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试替换for循环,以便在pandas中获得更高的性能。在熊猫中使用for循环是性能杀手,请在许多博客中阅读。现在,我必须对项集应用一些逻辑,并按emp_id分组。下面是代码块。目前,以下代码有效,但投诉与性能有关。我不能删除groupby当然,有没有其他技术可以用来提高性能

     emp_groups = self.df.groupby("emp_id")
     for key, item in emp_groups: 
         for _ridx in range(0, len(self.rules), 2):
           # logic on item

_ridx-是一组应用于列组的规则


Tags: 代码inselfidpandasfor逻辑性能
1条回答
网友
1楼 · 发布于 2024-09-24 02:26:56

分组对象中的item只是一个DataFrame,因此,如果可能,您可以对逻辑进行矢量化,并与agg函数结合以加快速度—例如

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [100, 100, 200, 200, 300, 400], 'B': [1, 2, 3, 4, 5, 6], 'C': [3, 4, 5, 2, 4, 1]})
gdf = df.groupby('A')
def f1(gdf):
    for key, item in gdf:
        return item.sum()

import timeit
print(timeit.timeit('f1(gdf)', globals=globals(), number=10000)) #~8s
print(timeit.timeit('gdf.agg(np.sum)', globals=globals(), number=10000)) #~5s

相关问题 更多 >