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

如何在DataFrame各类数据的相邻行之间插入3个新行

针对每个Class在相邻行间插入新行的实现方案

嘿,这个需求我之前也碰到过,用pandas的分组功能就能完美解决,下面给你一步步拆解:

核心需求梳理

我们要给每个Class组内的每一对相邻行之间都插入3个新行,新行的Class和当前组保持一致,IncreasingNumber默认可以填充为NaN,要是你需要其他自定义值,后面也能轻松调整。

第一步:构造测试数据(模拟你的数据集)

先造个小样本方便快速验证效果,不用直接用31行的大数据:

import pandas as pd
import numpy as np

# 生成2个Class,每个Class各5行(代替你实际的31行)
class_list = ["A"]*5 + ["B"]*5
num_list = list(range(3, 8)) + list(range(1, 6))
df = pd.DataFrame({"Class": class_list, "IncreasingNumber": num_list})

第二步:编写单组处理函数

这个函数专门负责给单个Class的子数据插入空行,逻辑很直白:遍历每一行,先把当前行加入结果,只要不是组内最后一行,就跟着插入指定数量的空行:

def insert_empty_rows(group, insert_num=3):
    processed_data = []
    for idx, row in group.iterrows():
        processed_data.append(row)
        # 排除组内最后一行,避免在末尾多余插行
        if idx != group.index[-1]:
            # 构造空行:Class继承当前行,数值列默认填NaN
            empty_rows = pd.DataFrame({
                "Class": [row["Class"]]*insert_num,
                "IncreasingNumber": [np.nan]*insert_num
            })
            processed_data.append(empty_rows)
    # 拼接所有行与空行,重置索引
    return pd.concat(processed_data, ignore_index=True)

第三步:分组应用函数,得到最终结果

用groupby按Class分组,把上面的函数套用到每个组上,最后合并所有组的处理结果:

# group_keys=False避免生成多余的分组索引列
final_df = df.groupby("Class", group_keys=False).apply(insert_empty_rows, insert_num=3)

效果示例

比如原Class A的前两行是:

Class IncreasingNumber
A 3
A 5

处理后会变成:

Class IncreasingNumber
A 3
A NaN
A NaN
A NaN
A 5
...(后续每对相邻行之间都按此规则插入空行)

如果需要给新行的IncreasingNumber填充其他值,比如0或空字符串,直接修改empty_rows里的[np.nan]*insert_num即可,比如改成[0]*insert_num就会填充为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:55