如何按分组为DataFrame添加符合规则的序号列
为DataFrame添加符合规则的序号列
原始数据定义
import pandas as pd df = pd.DataFrame({ "model": ["A","A","A","A","A","A","A","B","B","B","B","B","B","B"], "item": ["aa","ab","ab","ab","ac","ad","ad","ba","ba","ba","bb","bb","bb","bc"] })
实现代码
# 按model分组,给组内每个唯一item分配连续标识(同一item标识一致) df['item_id'] = df.groupby('model')['item'].transform(lambda x: x.factorize()[0]) # 对标识取模3,实现0、1、2循环 df['serial'] = df['item_id'] % 3 # 可选:删除中间生成的item_id列 df = df.drop('item_id', axis=1)
逻辑说明
- 按
model分组处理,确保不同model组的序号独立重置,满足「model切换时序号从0开始」的要求; factorize()会给组内每个唯一item分配从0开始的连续整数,同一item得到相同的数值,保证「同一item序号相同」;- 对标识值取模3,让序号在0、1、2之间循环,符合规则要求。
最终结果
处理后的DataFrame如下:
| 序号 | model | item | serial |
|---|---|---|---|
| 0 | A | aa | 0 |
| 1 | A | ab | 1 |
| 2 | A | ab | 1 |
| 3 | A | ab | 1 |
| 4 | A | ac | 2 |
| 5 | A | ad | 0 |
| 6 | A | ad | 0 |
| 7 | B | ba | 0 |
| 8 | B | ba | 0 |
| 9 | B | ba | 0 |
| 10 | B | bb | 1 |
| 11 | B | bb | 1 |
| 12 | B | bb | 1 |
| 13 | B | bc | 2 |
内容的提问来源于stack exchange,提问作者ghost_like
相关产品推荐
相关产品推荐

