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

DataFrame惰性求值:Pandas分组计算性能差异及技术疑问

关于Pandas分组聚合性能的问题与解释

先看一个性能对比演示,第二种写法的速度比第一种慢10倍:

import pandas as pd
from timeit import default_timer as timer

r = range(1,int(1e7))

df = pd.DataFrame({
    'col0': [i % 3 for i in r],
    'col1': r
})

df['pad'] = '*' * 100

start = time.time()
print(df.groupby('col0')['col1'].min())
end = time.time()
print(end - start)

start = time.time()
print(df.groupby('col0').min()['col1'])
end = time.time()
print(end - start)

运行输出:

col0
0    3
1    1
2    2
Name: col1, dtype: int64
0.14302301406860352
col0
0    3
1    1
2    2
Name: col1, dtype: int64
1.4934422969818115

原因很直观:第二种写法中,Pandas会对所有列(包括pad列)计算min值,而第一种写法只针对col1列计算。

问题解答

  • 没办法让Python自动识别第二种写法只需要计算col1列的聚合值。
  • 这属于Pandas的实现限制,而非Python语言本身的限制。因为表达式df.groupby('col0').min()在执行时,Pandas的分组聚合逻辑会遍历所有列完成计算,生成完整的聚合结果DataFrame之后,才会执行后续的['col1']索引操作。Python的求值顺序是先完成整个表达式的左侧计算,再处理索引,所以没法提前跳过其他列的计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:37:35