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

按单元格值复制行并追加至Pandas DataFrame的实现需求

解决方案:根据指定列的值复制并追加行

嘿,这个需求其实可以用Pandas的几个核心函数轻松实现,我给你准备了两种符合要求的方案,分别对应完全复制行和带复制标记区分原行/复制行的呈现形式,一起来看看吧!

首先先还原你的原始DataFrame:

import pandas as pd

df = pd.DataFrame(
    {'X':('a','b','c','d'), 
     'Y':('a','b','d','e'), 
     'Z':('a','b','c','d'), 
     '#':(1,2,1,3)
    }
)

方案一:完全复制行的形式

这个方案会直接将需要复制的行按要求重复,最终结果里原行和复制行完全一致,没有额外标记:

import numpy as np

# 计算每一行需要保留/复制的总次数:原行1次 + (#值-1)次复制,所以总次数就是#列的值
repeat_counts = df['#'].values
# 根据次数重复行索引
repeated_indices = np.repeat(df.index, repeat_counts)
# 基于重复后的索引构造新的DataFrame
result_full_copy = df.loc[repeated_indices].reset_index(drop=True)

执行后result_full_copy的结果:

XYZ#
aaa1
bbb2
bbb2
ccc1
ded3
ded3
ded3

可以看到第二行(#=2)被复制了1次,第四行(#=3)被复制了2次,完全符合需求。

方案二:带复制标记的形式

如果需要区分原行和复制出来的行,可以添加一个标记列,原行标记为False,复制行标记为True:

# 给每行生成一个标记列表:原行是False,复制的行是True,数量对应#值的次数
df['is_copy'] = df['#'].apply(lambda x: [False] + [True]*(x-1))
# 展开列表,同时将对应的行复制
result_with_flag = df.explode('is_copy').reset_index(drop=True)

执行后result_with_flag的结果:

XYZ#is_copy
aaa1False
bbb2False
bbb2True
ccc1False
ded3False
ded3True
ded3True

这个方案在保留需求功能的同时,能清晰区分哪些是原始行,哪些是复制生成的行,方便后续的数据分析操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:59:15