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

如何在Pandas DataFrame中按列变化计数并按双列条件重置

在Pandas DataFrame中按规则生成计数列

需求说明

需要生成Count列,规则如下:

  • 当ColB的值与前一行不同时,计数递增
  • 当ColA和ColB同时为True时,计数重置为1

原始数据

| ColA | ColB |
|------|------|
| TRUE | TRUE |
| FALSE| FALSE|
| FALSE| FALSE| 
| FALSE| FALSE|  
| FALSE| FALSE| 
| FALSE| TRUE | 
| FALSE| FALSE| 
| FALSE| FALSE| 
| FALSE| FALSE| 
| FALSE| TRUE | 
| FALSE| FALSE|  
| FALSE| FALSE| 
| FALSE| FALSE|  
| FALSE| TRUE | 
| FALSE| FALSE| 
| FALSE| FALSE| 
| TRUE | TRUE |  
| FALSE| FALSE| 
| FALSE| FALSE|  
| FALSE| FALSE|  

期望输出

| ColA | ColB | Count|
|------|------|------|
| TRUE | TRUE |   1  |
| FALSE| FALSE|   1  |
| FALSE| FALSE|   1  |
| FALSE| FALSE|   1  |
| FALSE| FALSE|   1  |
| FALSE| TRUE |   2  |
| FALSE| FALSE|   2  |
| FALSE| FALSE|   2  |
| FALSE| FALSE|   2  |
| FALSE| TRUE |   3  |
| FALSE| FALSE|   3  |
| FALSE| FALSE|   3  |
| FALSE| FALSE|   3  |
| FALSE| TRUE |   4  |
| FALSE| FALSE|   4  |
| FALSE| FALSE|   4  |
| TRUE | TRUE |   1  |
| FALSE| FALSE|   1  |
| FALSE| FALSE|   1  |
| FALSE| FALSE|   1  |

解决方案

实现代码

import pandas as pd

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

# 1. 创建重置标记:ColA和ColB同时为True时标记为1
reset_flag = (df['ColA'] & df['ColB']).astype(int)
# 2. 生成分组键,每个重置点开启新分组
group_key = reset_flag.cumsum()

# 3. 分组内计算计数:ColB与前一行不同则递增,初始为1
df['Count'] = df.groupby(group_key)['ColB'].apply(
    lambda x: (x != x.shift()).cumsum().fillna(1).astype(int)
)

print(df)

代码解释

  • 重置标记与分组:reset_flag标记所有需要重置计数的行,通过cumsum()生成group_key,将DataFrame划分为多个独立的分组,每个分组从重置行开始。
  • 分组内计数逻辑:对每个分组的ColB列,比较当前行与前一行的值是否不同(x != x.shift()),将差异值累加得到计数。分组第一行没有前一行,用fillna(1)确保初始计数为1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:49:57