如何在Pandas中为分类索引组添加数值索引?
Pandas分组生成组内付款编号解决方案
原始数据集
| client | client case | client payment |
|---|---|---|
| foo | 1 | 200 |
| foo | 1 | 250 |
| foo | 1 | 225 |
| foo | 2 | 200 |
| bar | 1 | 500 |
| bar | 1 | 500 |
目标效果
需要为每个client+client case的分组生成连续的payment number(从1开始),最终结果如下:
| client | client case | client payment | payment number |
|---|---|---|---|
| foo | 1 | 200 | 1 |
| foo | 1 | 250 | 2 |
| foo | 1 | 225 | 3 |
| foo | 2 | 200 | 1 |
| bar | 1 | 500 | 1 |
| bar | 1 | 500 | 2 |
最优解决方案
使用Pandas原生的分组+累计计数方法实现,全程为向量化操作,无需遍历行,效率拉满:
import pandas as pd # 构造示例DataFrame(已有数据可跳过此步) data = { 'client': ['foo', 'foo', 'foo', 'foo', 'bar', 'bar'], 'client case': [1, 1, 1, 2, 1, 1], 'client payment': [200, 250, 225, 200, 500, 500] } df = pd.DataFrame(data) # 生成payment number列 df['payment number'] = df.groupby(['client', 'client case']).cumcount() + 1
代码说明
groupby(['client', 'client case']):按客户和案件维度完成分组cumcount():为每组内的行生成从0开始的连续索引+1:将索引偏移为从1开始的付款编号
运行后即可得到目标格式的DataFrame。
内容的提问来源于stack exchange,提问作者Ryan Honea
相关产品推荐
相关产品推荐

