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

Pandas循环新增列触发DataFrame高度碎片化性能警告的优化咨询

问题根因

反复在循环中调用ranking[x] = xxx的写法,本质是每次循环都执行一次DataFrame的列插入操作,该操作会触发频繁的内存重分配,产生大量内存碎片,触发性能警告。

最优解决方案

pandas的rank方法本身支持直接对整个DataFrame做向量化运算,无需循环,一行代码即可完成所有列的排名计算,从根源避免碎片化问题:

# 全列计算排名
ranking = df.rank(axis=0, ascending=False, method='min')

如果仅需要处理1到num_sims范围内的列,先做列切片再计算即可:

# 仅处理指定范围的列
ranking = df.loc[:, 1:num_sims].rank(axis=0, ascending=False, method='min')
特殊场景兼容方案

如果业务逻辑要求必须逐列做自定义处理后再拼接,可以先将所有列的计算结果收集为Series列表,再用pd.concat一次性拼接成DataFrame,避免多次插入:

# 先收集所有列的排名结果
rank_res = [df[x].rank(ascending=False, method='min') for x in range(1, num_sims+1)]
# 一次性拼接得到ranking
ranking = pd.concat(rank_res, axis=1)

以上两种方案都完全避免了逐列插入的操作,内存分配效率提升非常明显,不会再触发碎片化警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:48:04