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

高效实现Pandas按列指定次数重复行的方法(替代循环)

高效重复DataFrame行的解决方案

你当前基于iterrows循环+concat的方案在大数据集下性能极差,核心问题是Python层面的逐行循环和频繁的DataFrame拼接会带来巨大的时间与内存开销。pandas提供了原生的矢量化操作方案,完全不需要循环或apply,能极大提升处理效率。

最优解决方案(矢量化操作)

直接利用df.index.repeat()生成重复的索引,再通过loc索引器一次性获取所有重复行:

import pandas as pd

df = pd.DataFrame(data={'col1': list('abc'), 'col2': [2, 2, 3]})

# 核心代码:一次性完成所有行的重复
df_repeated = df.loc[df.index.repeat(df['col2'])]

# 可选:重置索引(如果需要连续的整数索引)
df_repeated = df_repeated.reset_index(drop=True)

运行结果:

col1col2
a2
a2
b2
b2
c3
c3
c3

为什么这个方法高效?

这是pandas的矢量化操作,所有重复逻辑在底层C语言实现,完全避免了Python层面的循环开销,处理十万甚至百万级数据时,速度比逐行循环快100倍以上。

关于你尝试的apply方法(不推荐)

如果一定要用apply,正确的写法如下,但注意该方法效率远低于上面的矢量化方案,仅适合小数据集:

# apply的正确写法(不推荐用于大数据集)
df_apply = df.apply(lambda row: pd.DataFrame([row.values]*row['col2'], columns=df.columns), axis=1)
df_apply = pd.concat(df_apply.tolist()).reset_index(drop=True)

apply本质还是逐行遍历,和iterrows循环的效率差异不大,只是写法更简洁,大数据集下仍会出现性能瓶颈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:46:08