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

如何统计Pandas DataFrame列中True和False的连续块数量

统计布尔值连续块数量的方法

可以通过Pandas的差值检测与分组统计实现需求,以下是具体方案:

实现步骤与代码

1. 完整代码示例

import pandas as pd

# 构造示例DataFrame
data = {'col': [True, True, True, False, False, False, True, True, False, True]}
index = pd.to_datetime([
    '2023-05-04 10:34:51.002100665',
    '2023-05-04 10:34:51.007100513',
    '2023-05-04 10:34:51.012100235',
    '2023-05-04 10:34:51.017100083',
    '2023-05-04 10:34:51.022099789',
    '2023-05-04 10:35:23.610740595',
    '2023-05-04 10:35:23.615740466',
    '2023-05-04 10:35:23.620740227',
    '2023-05-04 10:35:23.625740082',
    '2023-05-04 10:35:23.630739797'
])
df = pd.DataFrame(data, index=index)

# 标记值变化的位置(第一行默认算新块)
change_mask = df['col'].diff().fillna(True)
# 生成每个连续块的唯一ID
df['block_id'] = change_mask.cumsum()
# 按布尔值分组,统计对应块的数量
block_counts = df.groupby('col')['block_id'].nunique()

# 输出结果
print(f"Number of True blocks:  {block_counts[True]}")
print(f"Number of False blocks: {block_counts[False]}")

2. 运行结果

Number of True blocks:  3
Number of False blocks: 2

3. 简化写法

如果不需要保留中间列,可用一行代码完成统计:

block_counts = df['col'].ne(df['col'].shift()).cumsum().groupby(df['col']).nunique()
  • df['col'].ne(df['col'].shift()):判断当前行与上一行值是否不同,返回布尔序列
  • .cumsum():累加变化点,生成每个连续块的唯一ID
  • .groupby(df['col']).nunique():按布尔值分组,统计每个值对应的唯一块数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:53:25