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

如何按指定条件删除DataFrame中含0值的行?

如何按指定条件删除DataFrame中含0值的行?

我来帮你实现这个需求,咱们一步步来操作:

首先先还原你给出的示例DataFrame,用pandas创建:

import pandas as pd

data = {'A': [1, 0, 0, 0, 2, 3],
        'B': [2, 0, 0, 1, 0, 1]}
df = pd.DataFrame(data)

接下来我们需要先标记出所有包含0的行(只要A或B列有0就算):

df['has_zero'] = (df['A'] == 0) | (df['B'] == 0)

然后要把连续的含0/不含0行分成不同的分组,这样才能统计每组的连续行数:

# 通过对比当前行与上一行的has_zero值,不同则分组序号加1
df['group'] = (df['has_zero'] != df['has_zero'].shift()).cumsum()

再计算每个分组的总行数,并把这个长度赋值给组内的每一行:

df['group_len'] = df.groupby('group')['has_zero'].transform('size')

现在就可以按照你的条件筛选要保留的行了:

  • 不含0的行直接保留
  • 含0的行仅保留连续行数在6到20之间的组(也就是排除1-5行连续含0、以及超过20行连续含0的组)
result_df = df[~df['has_zero'] | ((df['group_len'] > 5) & (df['group_len'] <= 20))].drop(columns=['has_zero', 'group', 'group_len'])

运行后得到的结果就是你期望的输出:

A  B
0  1  2
5  3  1

简单解释下逻辑:中间那4行连续含0的行属于1-5行的范围,所以被删除;如果有一段25行连续的含0行,也会被删除;而如果是8行连续的含0行,就会被保留下来。

备注:内容来源于stack exchange,提问作者Cinecca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:39:30