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

如何删除Pandas列中末尾连续的非空条目

实现方法

要删除Pandas列中各非空段的末尾连续非空条目(将其设为None),可以通过以下步骤完成:

  1. 标记非空值:生成布尔序列,标记目标列中哪些行是非空的。
  2. 定位非空段的末尾元素:对比当前行和下一行的非空状态,找出每个非空段的最后一个元素位置。
  3. 置空末尾元素:将这些位置的元素设为None。

完整代码示例

import pandas as pd

# 初始化原始数据
df = pd.DataFrame({
    0: ['1/24/2022', '1/25/2022', '1/26/2022', '1/27/2022', '1/28/2022', '1/29/2022', '1/30/2022', '1/31/2022', '2/1/2022', '2/2/2022', '2/3/2022', '2/4/2022', '2/5/2022', '2/6/2022', '2/7/2022', '2/8/2022', '2/9/2022'],
    1: [None, None, 'AB', 'C', 'D', 'Epiphany', None, None, None, None, None, 'A', 'A', 'A', 'B', 'B', None]
})

# 指定要处理的目标列
target_column = 1

# 生成非空标记序列
non_null_mask = df[target_column].notna()

# 找出每个非空段的最后一个元素:当前行非空,下一行是空(或为最后一行)
last_in_segment_mask = non_null_mask & ~non_null_mask.shift(-1, fill_value=False)

# 将这些位置的元素设为None
df.loc[last_in_segment_mask, target_column] = None

# 验证结果
print(df[target_column].tolist())

代码说明

  • non_null_mask = df[target_column].notna():生成布尔序列,True表示对应行非空。
  • non_null_mask.shift(-1, fill_value=False):将布尔序列向下偏移一行,最后一行填充False,用来判断下一行是否为空。
  • last_in_segment_mask:通过逻辑运算筛选出每个非空段的最后一个元素位置。
  • df.loc[last_in_segment_mask, target_column] = None:将筛选出的位置元素置空。

执行后,目标列的结果将与你给出的期望输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:05:20