如何删除Pandas列中末尾连续的非空条目
实现方法
要删除Pandas列中各非空段的末尾连续非空条目(将其设为None),可以通过以下步骤完成:
- 标记非空值:生成布尔序列,标记目标列中哪些行是非空的。
- 定位非空段的末尾元素:对比当前行和下一行的非空状态,找出每个非空段的最后一个元素位置。
- 置空末尾元素:将这些位置的元素设为
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
相关产品推荐
相关产品推荐

