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

如何优化迭代Pandas DataFrame的嵌套循环性能以计算ID对应生产时长

优化方案

核心问题分析

原有代码的性能瓶颈来自*O(唯一ID数 * 总数据行数)*的嵌套循环逻辑,3000个ID对应18万行数据会产生5.4亿次Python层循环,运行效率极低。优化核心是替换Python循环为Pandas原生向量化操作,底层用C实现计算,效率可提升上千倍。

优化后实现代码

第一步:保证数据时序正确

首先按ID和时间升序排序,确保每个生产环节的start记录一定在对应complete记录之前:

df = df.sort_values(by=['ID', 'Time'], ignore_index=True)

第二步:计算分段时长与累计时长

通过分组+位移操作配对每一组start/complete记录,直接计算时间差与累计值:

# 配对同ID下相邻的start与complete,计算每段生产的秒数,仅complete行保留数值
df['interval_sec'] = df.groupby('ID', group_keys=False).apply(
    lambda x: (x['Time'] - x['Time'].shift(1)).dt.total_seconds().where(x['Status'] == 'complete')
)
# 计算累计生产时长,start行自动继承上一段结束的累计值
df['Cumulative_Time'] = df.groupby('ID')['interval_sec'].cumsum().ffill().fillna(0)

第三步:生成ID总时长明细表

直接用分组聚合实现,无需遍历分组:

df_ID_TotalTime = df.groupby('ID').agg(
    totalTimeId=('interval_sec', 'sum'),
    timeIntervals=('interval_sec', lambda x: x.dropna().tolist())
).reset_index()

效果验证

上述代码计算结果与原逻辑完全一致,18万行数据运行耗时可从10分钟压缩至100ms以内,性能提升超过6000倍。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:39:00