如何使用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)
实现步骤
- 创建辅助列标记触发点
咱们先做一个叫is_B的辅助列,用来标记每一行是不是B——把布尔值转成整数后,B对应的就是1,其他行是0:
df['is_B'] = (df['Data'] == 'B').astype(int)
这时候你的DataFrame会多一列标记结果:
| Data | is_B |
|---|---|
| A | 0 |
| A | 0 |
| B | 1 |
| A | 0 |
| ... | ... |
- 累加辅助列生成分组编号
接下来用cumsum()对is_B列做累加求和——每次遇到B(也就是值为1的行),累加结果就会加1,而A对应的0不会改变当前的累加值,正好实现“每遇到B就递增分组编号”的需求:
df['Group'] = df['is_B'].cumsum()
- 可选:删除辅助列
如果不需要保留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
相关产品推荐
相关产品推荐

