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

Python数据池化优化:求更快、低内存的高效实现方案

高效实现按指定次数重复数据行的方案

针对你处理3.5GB数据集时遇到的耗时久、内存占用高的问题,原代码的核心问题是两次重复调用groupby.apply做逐组循环处理,这种方式在大数据集上效率极低。以下是两种更高效的实现方案:

方案1:利用Pandas索引重复(最快最省内存)

直接通过索引重复实现行复制,完全避免分组循环:

# 按Amount列的值重复对应行,保留所有列
result = df.loc[df.index.repeat(df['Amount'])]
# 如果不需要保留Amount列,直接删除
result = result.drop('Amount', axis=1)

这个方法依赖Pandas底层的向量优化操作,比原代码快一个数量级以上,内存占用仅为原方法的几分之一——因为不需要生成中间的pd.Series对象。

方案2:使用explode(Pandas 0.25+版本支持)

如果你的Pandas版本足够新,可以先构造重复的列表再展开:

# 给每行生成对应长度的空列表,再展开
df['temp'] = df['Amount'].apply(lambda x: [None]*x)
result = df.explode('temp').drop(['Amount', 'temp'], axis=1)

这个方法效率略低于方案1,但代码可读性较好,适合对代码简洁性有要求的场景。

极端内存不足时的分块处理

如果数据集大到单内存无法容纳,可以按分块读取处理:

chunk_size = 100000  # 根据自身内存情况调整块大小
result_list = []

for chunk in pd.read_csv('your_data.csv', chunksize=chunk_size):
    processed_chunk = chunk.loc[chunk.index.repeat(chunk['Amount'])].drop('Amount', axis=1)
    result_list.append(processed_chunk)

# 合并所有分块结果
final_result = pd.concat(result_list, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:34:50