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

如何使用Pandas内置功能实现基于B值出现的Series分组

Pandas实现按B出现次数递增分组编号的方案

嘿,这个需求我之前也碰到过,用Pandas的内置函数就能轻松搞定,核心就是靠一个辅助列标记分组触发点,再做累加就行。咱们一步步来:

首先先还原你的示例数据:

import pandas as pd

data = {'Data': ['A', 'A', 'B', 'A', 'A', 'A', 'B', 'A', 'A', 'B']}
df = pd.DataFrame(data)

实现步骤

  1. 创建辅助列标记触发点
    咱们先做一个叫is_B的辅助列,用来标记每一行是不是B——把布尔值转成整数后,B对应的就是1,其他行是0:
df['is_B'] = (df['Data'] == 'B').astype(int)

这时候你的DataFrame会多一列标记结果:

Datais_B
A0
A0
B1
A0
......
  1. 累加辅助列生成分组编号
    接下来用cumsum()对is_B列做累加求和——每次遇到B(也就是值为1的行),累加结果就会加1,而A对应的0不会改变当前的累加值,正好实现“每遇到B就递增分组编号”的需求:
df['Group'] = df['is_B'].cumsum()
  1. 可选:删除辅助列
    如果不需要保留is_B这个中间列,直接删掉就行:
df = df.drop('is_B', axis=1)

最终结果

运行完上面的代码,你会得到完全符合需求的结果:

Data  Group
0    A      0
1    A      0
2    B      1
3    A      1
4    A      1
5    A      1
6    B      2
7    A      2
8    A      2
9    B      3

小调整(如果需要)

要是你希望分组编号从1开始而不是0,只需要在累加后加1即可:

df['Group'] = df['is_B'].cumsum() + 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:53:10