如何用Pandas方法链将DataFrame的每一行重复3次?
Pandas方法链实现每行重复3次
原始DataFrame
import pandas as pd df = pd.DataFrame({ 'id': [1, 2, 3, 4, 5], 'animal': ['dog', 'cat', 'rabbit', 'horse', 'fox'] })
预期输出
id animal 0 1 dog 1 1 dog 2 1 dog 3 2 cat 4 2 cat 5 2 cat 6 3 rabbit 7 3 rabbit 8 3 rabbit 9 4 horse 10 4 horse 11 4 horse 12 5 fox 13 5 fox 14 5 fox
方法链实现方案
最简洁高效的方式是利用索引重复配合loc,通过方法链串联操作:
result = ( df .loc[lambda x: x.index.repeat(3)] # 基于重复3次的索引选取行 .reset_index(drop=True) # 重置索引为连续序列(可选,按需保留) )
步骤解释
lambda x: x.index.repeat(3):生成包含原索引重复3次的序列,比如原索引是0-4,处理后变成[0,0,0,1,1,1,2,2,2,3,3,3,4,4,4].loc[...]:根据这个重复索引序列,从原DataFrame中选取对应行,实现每行重复3次.reset_index(drop=True):如果不需要保留原有的重复索引,执行此步骤生成连续新索引;若要保留原索引可省略
另外也可以用explode的方式实现,适合理解逻辑但效率稍低:
result = ( df .assign(repeat_col=lambda x: [range(3)]*len(x)) # 给每行添加长度为3的列表 .explode('repeat_col') # 将列表展开成多行 .drop('repeat_col', axis=1) # 删除临时添加的列 .reset_index(drop=True) )
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

