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

如何在Pandas DataFrame中统计布尔列连续True/False生成正负计数列

解决方案

你之前的代码只能统计True的累计值,是因为用(~mask).cumsum()作为分组键仅能对连续True做正确分组,无法处理连续False的分组识别,也没有加入符号判断逻辑。正确实现方式如下:

完整代码示例

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'Mask': [True, True, True, False, False, True, False, False]
})

# 生成连续相同值的分组ID
group_key = df['Mask'].ne(df['Mask'].shift()).cumsum()
# 按分组计算带符号的组长度,映射到每一行
df['Count'] = df.groupby(group_key)['Mask'].transform(
    lambda x: len(x) if x.iloc[0] else -len(x)
)

运行后得到的df就是你需要的预期结果:

MaskCount
True3
True3
True3
False-2
False-2
True1
False-2
False-2

逻辑说明

  • df['Mask'].ne(df['Mask'].shift()):逐行对比当前行和上一行的Mask值是否不同,不同返回True,相同返回False
  • 对上述结果做cumsum()累加,每遇到一个新分组(返回True)就累加1,最终所有连续相同值的行会拿到同一个分组ID
  • 按分组ID做groupby后,用transform计算每个组的长度,再根据组内第一个Mask的值判断符号:True组返回正长度,False组返回负长度,transform会自动把组计算结果映射到组内的每一行,直接生成目标Count列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:08