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

如何统计Pandas DataFrame中布尔值True的连续出现次数?

解决Pandas统计布尔值True连续出现次数的问题

需求说明

连续n个True对应的连续出现次数为n-1(比如3个连续True对应2次连续出现),针对给定的DataFrame,预期总次数为6。

方法一:通过索引差值统计

直接筛选True的索引,计算相邻索引的差值,统计差值为1的数量:

import pandas as pd

df = pd.DataFrame({"A": [False, False, True, True, False, True, False, False, False, False, True, True, True, True, False, True, True, True]})

# 获取所有True的行索引
true_indices = df[df["A"]].index
# 计算相邻索引的差值
index_diff = true_indices.diff()
# 统计差值为1的次数(即连续True的次数)
total_count = (index_diff == 1).sum()

print(total_count)  # 输出6

原理:DataFrame默认索引是连续递增的,相邻True的索引差为1就代表二者连续,每一个这样的差值对应一次连续出现。

方法二:分组统计连续序列长度

通过分组标记连续的True序列,计算每个序列的长度后求和:

import pandas as pd

df = pd.DataFrame({"A": [False, False, True, True, False, True, False, False, False, False, True, True, True, True, False, True, True, True]})

# 为连续相同的序列分配唯一组ID
df["group_id"] = (df["A"] != df["A"].shift()).cumsum()
# 筛选True的组,统计每个组的长度
true_seq_lengths = df[df["A"]].groupby("group_id").size()
# 每个序列的连续次数为长度-1,求和得到总次数
total_count = (true_seq_lengths - 1).sum()

print(total_count)  # 输出6

原理:用shift()对比当前行与上一行的值,通过cumsum()生成组ID,将连续相同的True分到同一组;每个组的连续次数是长度减1,累加所有组的结果得到总次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:52:43