如何统计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
相关产品推荐
相关产品推荐

