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

如何基于bool列去除Pandas DataFrame中的连续重复行?

问题

我有如下数据集,希望基于bool列去除连续重复的行:

原始数据集

datetimenumberbool
2023-02-14 10:15:00195.35FALSE
2023-02-14 11:15:00195.8FALSE
2023-02-14 12:15:00195.87FALSE
2023-02-14 13:15:00196.06FALSE
2023-02-14 14:15:00195.97TRUE
2023-02-14 15:15:00195.98TRUE
2023-02-15 09:15:00196.23FALSE
2023-02-15 10:15:00196.3FALSE
2023-02-15 11:15:00196.26TRUE
2023-02-15 12:15:00196.4TRUE
2023-02-15 13:15:00196.28TRUE
2023-02-15 14:15:00197.14FALSE
2023-02-15 15:15:00197.08FALSE
2023-02-16 09:15:00197.85TRUE
2023-02-16 10:15:00198.01TRUE

期望结果数据集

datetimenumberbool
2023-02-14 10:15:00195.35FALSE
2023-02-14 14:15:00195.97TRUE
2023-02-15 09:15:00196.23FALSE
2023-02-15 11:15:00196.26TRUE
2023-02-15 14:15:00197.14FALSE
2023-02-16 09:15:00197.85TRUE

我试过Pandas的drop_duplicates方法,但它会对整个bool列全局去重,只得到2行数据。不想用循环逐行对比,求Pandas原生解决方案。


解决方案

可以利用Pandas的shift()方法对比当前行与前一行的bool值,筛选出值发生变化的行,同时保留第一行(因为第一行没有前一行):

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'datetime': ['2023-02-14 10:15:00', '2023-02-14 11:15:00', '2023-02-14 12:15:00', '2023-02-14 13:15:00', '2023-02-14 14:15:00', '2023-02-14 15:15:00', '2023-02-15 09:15:00', '2023-02-15 10:15:00', '2023-02-15 11:15:00', '2023-02-15 12:15:00', '2023-02-15 13:15:00', '2023-02-15 14:15:00', '2023-02-15 15:15:00', '2023-02-16 09:15:00', '2023-02-16 10:15:00'],
    'number': [195.35, 195.8, 195.87, 196.06, 195.97, 195.98, 196.23, 196.3, 196.26, 196.4, 196.28, 197.14, 197.08, 197.85, 198.01],
    'bool': [False, False, False, False, True, True, False, False, True, True, True, False, False, True, True]
})

# 生成筛选掩码:当前行bool值与前一行不同,或为第一行
mask = df['bool'] != df['bool'].shift(1)
result = df[mask]

print(result)

也可以用ne()方法简化写法,效果完全一致:

mask = df['bool'].ne(df['bool'].shift())
result = df[mask]

这种方法是Pandas原生的向量化操作,无需循环,处理效率远高于逐行对比。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:29:53