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

基于条件拆分记录并计算:Pandas百万级数据优化方案咨询

高效拆分Pandas DataFrame记录的优化方案

原方案使用iterrows()逐行处理,在百万级数据量下性能极差——这是因为逐行循环完全没有利用Pandas的向量化运算优势,每一次循环都会带来额外的开销。下面是基于向量化操作的优化方案,能大幅提升处理速度:

核心思路

对需要拆分的数据集,直接生成两份副本分别处理_T1和_T2的逻辑,所有计算都用Pandas的向量化方法完成,避免任何逐行循环。

优化后的完整代码

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'UID': ['A','B','C','D'],
    'FlagVal': [0,100,50,90],
    'TrueVal': [1000,1000,1000,1000]
})

# 拆分不需要处理的记录(FlagVal为0或100的)和需要拆分的记录
ndf = df[~df['FlagVal'].between(0, 100, inclusive='neither')].copy()
mdf = df[df['FlagVal'].between(0, 100, inclusive='neither')].copy()

# 处理_T1版本的记录
t1_df = mdf.copy()
t1_df['UID'] = t1_df['UID'] + '_T1'
t1_df['Flag'] = 'Y'
t1_df['TrueVal'] = t1_df['TrueVal'] * t1_df['FlagVal'] / 100
t1_df['FlagVal'] = 100

# 处理_T2版本的记录
t2_df = mdf.copy()
t2_df['UID'] = t2_df['UID'] + '_T2'
t2_df['Flag'] = ''
t2_df['TrueVal'] = t2_df['TrueVal'] * (1 - t2_df['FlagVal'] / 100)
t2_df['FlagVal'] = 0

# 合并所有结果
final_df = pd.concat([ndf, t1_df, t2_df], ignore_index=True)

关键优化点

  • 全程向量化运算:所有字段的修改和计算都是对整个DataFrame列进行操作,Pandas底层会用C语言实现的逻辑处理,效率远高于逐行循环。
  • 避免逐行对象复制:原方案中每一行都要复制两次并生成小DataFrame,合并时的开销极大;优化方案直接对整份数据复制,操作成本极低。
  • 简化合并逻辑:直接将三部分数据(无需拆分的、T1、T2)一次性合并,减少中间环节的内存占用和耗时。

性能对比

在百万级数据量下,该方案的处理速度通常会比原方案快50~100倍,且内存占用更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:36:27