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

如何按segID分段统计DataFrame中指定列的False值数量?

解决按分段统计False数量的问题

原代码的问题

  1. 你把False替换成了0,所以cols2里只有0和1,用Counter(df['cols2'])找False会触发KeyError,因为列里根本没有布尔值False。
  2. groupby('segID')[cols2 , false_count].sum()是错误写法:cols2需要加引号,且false_count是全局统计的总数,不能作为列名传入分组操作。

修正方案

你要统计的是每个segID分段中,当前值与前一个值不等(即原逻辑中的False)的数量,以下是几种简洁的实现方式:

方式一:基于现有cols2列统计

因为cols2=0对应原逻辑的False,直接统计每个分段中0的个数:

df['cols2'] = df['cols1'].diff().eq(0).replace({False: 0, True: 1})
# 按segID分组,统计cols2为0的行数
seg_false_count = df.groupby('segID')['cols2'].apply(lambda x: (x == 0).sum())
print(seg_false_count)

方式二:直接用布尔列统计(更直观)

不需要把布尔值替换成0/1,直接保留原布尔列,统计False的数量:

# 生成布尔列:True=当前与前一个值相等,False=不等
df['is_equal_to_prev'] = df['cols1'].diff().eq(0)
# 按segID分组,统计False的数量(取反后求和)
seg_false_count = df.groupby('segID')['is_equal_to_prev'].apply(lambda x: (~x).sum())
print(seg_false_count)

方式三:同时统计True和False数量

如果需要同时查看每个分段的总行数、True数量和False数量:

df['is_equal_to_prev'] = df['cols1'].diff().eq(0)
seg_stats = df.groupby('segID')['is_equal_to_prev'].agg(
    total_rows='count',
    true_count='sum',
    false_count=lambda x: (~x).sum()
)
print(seg_stats)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:22:41