You need to enable JavaScript to run this app. Pandas中替代逐行apply、按分组为DataFrame新增极差列的高效方法
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中替代逐行apply、按分组为DataFrame新增极差列的高效方法

高效实现方案

完全可以用Pandas向量化分组计算替代逐行apply的低效逻辑,在结果完全匹配预期的前提下,实现数量级的性能提升。

核心实现

核心逻辑是通过一次分组遍历统计每个组的Score极差,再把统计结果广播回组内的每一行,不需要逐行全表筛选匹配:

# 分组计算组内Score极差,直接生成新列
df['Score Range'] = df.groupby('Group Index')['Score'].transform(
    lambda s: np.ptp(s)  # 和原实现的极差计算逻辑完全等价
)

运行后得到的结果和原实现完全一致:

X  Group Index  Score  Score Range
0  1.1            1      1            2
1  1.2            1      2            2
2  1.3            1      3            2
3  2.1            2     10           20
4  2.2            2     20           20
5  2.3            2     30           20

极致性能优化版本

如果处理的数据量达到百万行以上,可以进一步去掉Python层的lambda调用开销,直接调用Pandas内置的C级聚合方法计算,性能会再上一个台阶:

# 预生成分组对象,分别计算组内max和min,直接相减得到极差
grouped_score = df.groupby('Group Index')['Score']
df['Score Range'] = grouped_score.transform('max') - grouped_score.transform('min')

原实现性能偏低的原因

  • 原逐行apply的逻辑,每处理一行就会对全表做一次条件过滤、筛选同组数据、计算极差,整体时间复杂度为O(N²)
  • 分组transform的实现仅需一次全表遍历完成所有组的统计,整体时间复杂度为O(N),数据量越大,性能优势越明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 08:54:09