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

如何按指定次数重复DataFrame行并正确拼接结果?

问题描述

现有两个数据结构:

  • DataFrame A:
A = pd.DataFrame([[1,2,3,4],
                  [5,6,7,8],
                  [9,10,11,12]])
  • 列表 B:[1,2,3]

需要生成DataFrame C,其中A的每一行按照B中对应位置的次数重复,最终结果如下:

C = pd.DataFrame([[1,2,3,4],
                  [5,6,7,8],
                  [5,6,7,8],
                  [9,10,11,12],
                  [9,10,11,12],
                  [9,10,11,12]])

原尝试的代码存在问题:

  1. 单循环赋值仅保留最后一次结果:
for i in range(0,2401):
    g = pd.concat([df1.iloc[[i]]]*z[i], ignore_index=True)
  1. 用列表收集后拼接的方法可行,但不够简洁且索引易混乱:
result = []
for i in range(0,2401):
    g = pd.concat([df1.iloc[[i]]]*z[i], ignore_index=True)
    result.append(g)

寻求更规范简洁的实现方式。


简洁实现方法

方法1:利用numpy.repeat生成重复索引

这是效率最高的方案之一,通过生成重复的行索引直接提取目标行:

import pandas as pd
import numpy as np

# 构造示例数据
A = pd.DataFrame([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
B = [1,2,3]

# 生成每行重复对应次数的索引
repeated_indices = np.repeat(A.index, B)
# 提取行并重置索引
C = A.iloc[repeated_indices].reset_index(drop=True)

方法2:优化循环拼接逻辑

如果偏好循环思路,可直接在循环中完成拼接,避免额外列表存储:

import pandas as pd

A = pd.DataFrame([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
B = [1,2,3]

C = pd.DataFrame()
for i in range(len(A)):
    # 直接拼接当前行的重复结果到目标DataFrame
    C = pd.concat([C, pd.concat([A.iloc[[i]]]*B[i], ignore_index=True)], ignore_index=True)

注:此方法效率低于方法1,适合小数据量场景。


内容的提问来源于stack exchange,提问作者S.Turk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:55:15