You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Pandas的groupby操作性能优于纯C实现?

问题:为何Pandas的groupby均值计算性能优于手动编写的纯C实现?

我有一个形状为(n,2)的NumPy数组,存储着x,y对,且每个x对应多个y值,需要计算每个唯一x对应的y的平均值。我知道这需要先做groupby再算均值,Pandas可以实现,但考虑到数据规模超过百万条,我以为Pandas速度会慢,于是用C写了个简单程序,通过ctypes调用完成操作。我用-fPIC参数,通过GCC MinGW编译生成了共享对象文件。

我的C代码如下:

int average( int* array , int size_array , int* unique , int size_unique , float* avg ){

    if (size_array % 2 != 0){
        return 1;
    }

    for (int i = 0 ; i < size_unique ; i++){

        int curX = unique[i];
        int sum = 0;
        int count = 0;

        for (int j = 0 ; j < size_array ; j += 2){
            if ( array[j] == curX ){
                sum += (array[j+1]);
                count += 1;
            }
        }

        float average = ((float)sum / (float)count);

        avg[i] = average;

    }

    return 0;

}

编译命令:
gcc -fPIC -shared c_out.so c_in.c

但这个C程序运行还是慢(百万级数据耗时约1.5秒),我试着用Pandas实现,结果惊讶地发现它的速度几乎是我写的C程序的两倍。这让我完全无法理解:Pandas是怎么做到的?它是不是用了哈希表?

我的Pandas代码如下:

ar = np.random.randint(0,2000,size = (40000,2))
df = pd.DataFrame({'x': ar[:,0], 'y': ar[:,1]})
df = df.groupby('y', as_index=False)['x'].mean()
x = df[['x']].to_numpy()
y = df[['y']].to_numpy()

我算了一下,对于形状为(40000,2)、包含2000个唯一元素的数组,C代码要执行约80,000,000次操作,耗时不到0.2秒,单次操作约2.5纳秒,已经接近我的处理器极限(3.5GHz四核CPU - Intel i7 4720HQ)。为什么Pandas性能还能更优?

我用Python的time库估算运行时间:在代码执行前后记录时间戳t1和t2,时间差就是运行时间。以下是40000条取值范围0到2448的数据的基准测试样本:

Run #1
    Pandas: 0.0623
    C: 0.2250

Run #2
    Pandas: 0.0660
    C: 0.1880

Run #3
    Pandas: 0.609
    C: 0.2261

Run #4
    Pandas: 0.0629
    C: 0.2488

Run #5
    Pandas: 0.0619
    C: 0.2159

想请教:为何Pandas的groupby均值计算性能优于手动编写的纯C实现?其底层采用了何种优化手段?

内容的提问来源于stack exchange,提问作者ARK1375

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:42:53