在Pandas中按tag_id和sub_id分组生成序号并排序DataFrame
解决方案:按指定列排序并生成分组序号
1. 准备示例数据并完成排序
先执行以下代码创建示例DataFrame,并按tag_id和log_date升序排序:
import pandas as pd dfx = pd.DataFrame({'tag_id': [496976, 496976, 603100, 603100, 715078, 715078, 978924, 978924, 1276120, 1276120, 1276120], 'sub_id' :['W00-8748', 'A00-1012', 'A00-4028', 'A00-4028', 'W00-0706', 'W00-1960', 'W00-1066', 'W00-6462', 'W00-1397', 'W00-1427', 'W00-6727'], 'log_date':['2012-06-28','2013-06-28','2016-02-18','2016-02-18','2008-02-25','2008-09-28','2008-04-28','2010-10-20','2008-07-10','2008-07-15','2008-07-15']}) # 按tag_id和log_date升序排序,重置索引 dfx = dfx.sort_values(by=['tag_id','log_date'], ascending=True).reset_index(drop=True)
2. 基于tag_id和sub_id生成分组序号
使用groupby()结合ngroup()方法,生成从1开始的分组序号列(命名为group_num):
dfx['group_num'] = dfx.groupby(['tag_id', 'sub_id']).ngroup(start=1)
最终结果
执行上述代码后,DataFrame的输出如下:
| tag_id | sub_id | log_date | group_num | |
|---|---|---|---|---|
| 0 | 496976 | W00-8748 | 2012-06-28 | 1 |
| 1 | 496976 | A00-1012 | 2013-06-28 | 2 |
| 2 | 603100 | A00-4028 | 2016-02-18 | 3 |
| 3 | 603100 | A00-4028 | 2016-02-18 | 3 |
| 4 | 715078 | W00-0706 | 2008-02-25 | 4 |
| 5 | 715078 | W00-1960 | 2008-09-28 | 5 |
| 6 | 978924 | W00-1066 | 2008-04-28 | 6 |
| 7 | 978924 | W00-6462 | 2010-10-20 | 7 |
| 8 | 1276120 | W00-1397 | 2008-07-10 | 8 |
| 9 | 1276120 | W00-1427 | 2008-07-15 | 9 |
| 10 | 1276120 | W00-6727 | 2008-07-15 | 10 |
内容的提问来源于stack exchange,提问作者Nabi Shaikh
相关产品推荐
相关产品推荐

