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

如何在iterrows中重复DataFrame行n次并生成目标新DataFrame

问题:将DataFrame每行重复n次生成新DataFrame

需求

遍历DataFrame的每一行,将每行重复n次后生成新的DataFrame。

当前实现代码

df = pd.DataFrame(
    [
        ("abcd", "abcd", "abcd")  # create your data here, be consistent in the types.
    ],
    ["A", "B", "C"]  # add your column names here
)

n_times = 2
for index, row in df.iterrows():
    new_df = row.loc[row.index.repeat(n_times)]
new_df

当前输出

0    abcd
0    abcd
1    abcd
1    abcd
2    abcd
2    abcd
Name: C, dtype: object

期望输出

A     B     C  
0    abcd  abcd  abcd
1    abcd  abcd  abcd

解决方案

问题分析

原来的代码有两个核心问题:

  • 循环中每次迭代都会覆盖new_df变量,最终只保留了最后一行的处理结果;
  • 对行对象(Series类型)执行重复操作后,得到的是一维Series,完全破坏了原DataFrame的列结构,导致输出不符合预期;
  • 额外注意:原代码构造DataFrame时参数写反了,["A","B","C"]被当成了行索引,列名应该用columns参数指定,这是隐藏的基础错误。

方法1:高效的向量式操作(推荐)

直接利用pandas的索引重复功能,不需要循环,性能更优:

import pandas as pd

# 纠正DataFrame构造的参数错误,用columns指定列名
df = pd.DataFrame(
    [("abcd", "abcd", "abcd")],
    columns=["A", "B", "C"]
)

n_times = 2
# 重复原DataFrame的行索引,重新生成DataFrame后重置索引
new_df = df.loc[df.index.repeat(n_times)].reset_index(drop=True)
print(new_df)

输出结果:

A      B      C
0  abcd  abcd  abcd
1  abcd  abcd  abcd

方法2:循环实现(不推荐,适合小数据量)

如果一定要用循环处理每行,需要把每次重复后的行保存到列表,最后合并成DataFrame:

import pandas as pd

df = pd.DataFrame(
    [("abcd", "abcd", "abcd")],
    columns=["A", "B", "C"]
)

n_times = 2
temp_rows = []
for _, row in df.iterrows():
    # 将单行转为DataFrame并重复n次,添加到临时列表
    temp_rows.append(pd.DataFrame([row] * n_times, columns=df.columns))

# 合并所有临时DataFrame,重置索引
new_df = pd.concat(temp_rows, ignore_index=True)
print(new_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:45:32