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

PySpark教程:如何将DataFrame中的行重复n次?

实现DataFrame按指定列值重复行的方法

你说得没错,explode()确实可以用来实现这个需求,不过需要先做个小转换才能让它发挥作用。另外还有一种更直接高效的方法,我都给你详细讲讲:

方法一:使用explode()函数

explode()的核心作用是把包含可迭代对象(比如列表、元组)的列拆分成多行,所以我们可以先给每行生成一个长度等于n的列表,再通过explode()完成拆分:

首先先构造你的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [2, 9, 8, 1, 3],
    'n': [1, 1, 2, 1, 3]
})

然后执行以下步骤实现行重复:

# 添加临时列,每行生成一个长度等于n的列表(元素内容不影响,只要长度匹配就行)
df['temp_list'] = df['n'].apply(lambda x: [x] * x)
# 对临时列执行explode,把列表拆分成多行
result = df.explode('temp_list')
# 删除临时列,得到最终结果
result = result.drop('temp_list', axis=1)

你也可以把这些步骤合并成链式操作,代码更简洁:

result = df.assign(temp_list=lambda x: x['n'].apply(lambda y: [y]*y)) \
           .explode('temp_list') \
           .drop('temp_list', axis=1)

方法二:使用index.repeat()(更高效直接)

这种方法不需要额外构造临时列,直接通过重复行索引来实现行重复,代码更简洁高效:

result = df.loc[df.index.repeat(df['n'])]

验证结果

两种方法运行后,得到的结果都和你期望的完全一致:

A  B  n
0  1  2  1
1  2  9  1
2  3  8  2
2  3  8  2
3  4  1  1
4  5  3  3
4  5  3  3
4  5  3  3

如果你的DataFrame数据量较大,index.repeat()的执行效率会更高;如果更习惯explode()的思路,第一种方法也完全可以满足需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:43:30