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

如何删除特定列非空行前的所有行?附Pandas实操示例

如何删除某列中遇到指定值之前直到另一列有效值的所有行?

需求说明

当column2中出现'Barrier'时,删除该行之前直到column1出现有效值的所有行(即从最近的column1有效值的下一行,到Barrier行本身都需要删除)。

示例数据

import pandas as pd

df1 = pd.DataFrame([
    ['A',   'x' ],
    [None,  'x' ],
    [None,  'Barrier' ],
    ['A',   'x' ],
    [None,  'x' ],
    [None,  'x' ],
    ['A',   'x' ],
    [None,  'x' ],
    [None,  'x'],
    [None,  'x'],
    ['B',   'x'],
    [None,  'x'],
    [None,  'x'],
    ['B',   'x'],
    [None,  'x'],
    [None,  'Barrier'],
    [None,  'x'],
    ['C',   'x'],
    [None,  'x'],
    [None,  'x']], 
   columns=['column1', 'column2'])

解决方案代码

# 获取所有Barrier行的索引
barrier_indices = df1[df1['column2'] == 'Barrier'].index
# 获取所有column1非空行的索引
valid_col1_indices = df1[df1['column1'].notna()].index

# 存储需要删除的索引
to_drop = set()

for idx in barrier_indices:
    # 找到当前Barrier之前最近的column1有效值索引
    last_valid = valid_col1_indices[valid_col1_indices < idx].max()
    # 把last_valid之后到当前Barrier的所有索引加入删除列表
    to_drop.update(range(last_valid + 1, idx + 1))

# 删除指定行并重置索引
result_df = df1.drop(to_drop).reset_index(drop=True)

# 查看结果
print(result_df)

代码逻辑说明

  1. 先定位所有Barrier行和column1有有效值的行的位置;
  2. 遍历每个Barrier,找到它前面最近的column1有效值行,确定需要删除的区间(有效值下一行到Barrier行);
  3. 删除这些区间内的行并重置索引,得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:46:30