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

Python实现随机删除Pandas DataFrame中不重叠n个连续行的方法

实现逻辑

  • 先按照给定公式计算需要删除的连续行组数,同时做边界校验避免删除全部数据
  • 每次随机选取一组不与已选区间重叠的连续n行起始索引
  • 汇总所有待删除行索引后直接删除,保留原始DataFrame的索引格式

完整代码

import random
import pandas as pd

def remove_n_consecutive_rows(df_in, n, percent):
    # 异常参数直接返回原数据副本
    if n <= 0 or percent <= 0 or len(df_in) < n:
        return df_in.copy()
    
    total_len = len(df_in)
    # 按公式计算待删除组数
    k = round(percent * total_len / n)
    # 限制最大可删除组数,避免删空所有数据
    max_possible_k = (total_len - 1) // n
    k = min(k, max_possible_k)
    if k == 0:
        return df_in.copy()
    
    drop_indices = set()
    # 初始化所有合法的连续n行起始索引
    available_starts = list(range(total_len - n + 1))
    
    for _ in range(k):
        # 随机选取一个起始位置
        selected_start = random.choice(available_starts)
        # 把当前组的所有行加入待删除集合
        drop_indices.update(range(selected_start, selected_start + n))
        # 过滤掉所有和当前组重叠的起始位置,保证后续选取的区间不重叠
        available_starts = [s for s in available_starts if s < selected_start - n + 1 or s > selected_start + n - 1]
    
    # 删除指定行,保留原始索引
    return df_in.drop(drop_indices)

调用示例

以你提供的20行测试数据为例,调用remove_n_consecutive_rows(df, n=3, percent=0.3),即可生成删除2组3个连续行的结果,和你给出的输出示例效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:57:02