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

如何编写Python函数实现Pandas DataFrame指定val列值的单行复制

函数实现方案

你不需要对全量索引做重复操作,有两种简洁的实现方式可选:


方案1:拼接法(默认把复制行放末尾)

直接筛选出目标行后和原DataFrame拼接即可,逻辑最直观:

import pandas as pd

def dupRow(df, val):
    # 筛选val列等于目标值的所有行
    target_rows = df[df['val'] == val]
    # 拼接原数据与目标行,重置索引保证序号连续
    return pd.concat([df, target_rows], ignore_index=True)

方案2:np.repeat 定向重复(复制行自动跟在原行后面)

如果你想用np.repeat相关的逻辑实现,可以给不同行指定不同的重复次数,仅对目标行设置重复2次,其余行保留1次即可:

def dupRow(df, val):
    # 匹配到的行重复2次,其余行重复1次
    repeat_counts = df['val'].eq(val).map({True: 2, False: 1})
    # 按重复规则生成新数据集,重置索引
    return df.loc[df.index.repeat(repeat_counts)].reset_index(drop=True)

效果验证

用你提供的示例数据测试:

# 构造输入DataFrame
df = pd.DataFrame({
    'val': ['a', 'b', 'c', 'd'],
    'data1': [3, 89, 7, 0],
    'data2': [1, 2, 3, 4],
    'data3': [9, 8, 7, 6]
})

# 调用函数
print(dupRow(df, 'c'))

输出结果和你要求的完全一致:

val  data1  data2  data3
0   a      3      1      9
1   b     89      2      8
2   c      7      3      7
3   c      7      3      7
4   d      0      4      6

可选调整

  • 如果val列存在多个匹配行,你只需要复制第一个匹配行,筛选时增加.head(1)即可:target_rows = df[df['val'] == val].head(1)
  • 如果有特殊的顺序要求,你可以拿到返回结果后自行调整行顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:48:03