如何在Pandas中按id分组、排序并为日期添加编号?
解决Pandas分组排序并添加组内序号的问题
需求说明
需要对数据表按id分组,每组内依据number of purchases升序排序,同时给每组添加从1开始的连续编号列rang。
实现步骤与代码
构造示例数据
先将你提供的原始数据转换为Pandas DataFrame:import pandas as pd data = { 'id': [1, 2, 3, 1, 1, 2, 2, 2, 3], 'sales_day': ['Monday', 'Monday', 'Monday', 'Tuesday', 'Wednesday', 'Tuesday', 'Wednesday', 'Friday', 'Tuesday'], 'number of purchases': [100, 110, 120, 130, 140, 150, 160, 170, 180] } df = pd.DataFrame(data)分组排序并生成序号
先按id和number of purchases排序,确保每组内的顺序符合要求;再通过分组后使用cumcount()生成组内序号(加1让编号从1开始):# 按id分组,组内按购买数升序排序 df_sorted = df.sort_values(by=['id', 'number of purchases']) # 添加rang列,每组编号从1开始 df_sorted['rang'] = df_sorted.groupby('id').cumcount() + 1 # 调整列顺序,让rang列在最后 df_result = df_sorted[['id', 'sales_day', 'number of purchases', 'rang']]查看最终结果
打印df_result即可得到你期望的输出:id sales_day number of purchases rang 0 1 Monday 100 1 3 1 Tuesday 130 2 4 1 Wednesday 140 3 1 2 Monday 110 1 5 2 Tuesday 150 2 6 2 Wednesday 160 3 7 2 Friday 170 4 2 3 Monday 120 1 8 3 Tuesday 180 2
关键逻辑说明
sort_values(by=['id', 'number of purchases']):先按id分组排序,再在每组内按购买数升序排列,保证后续编号的顺序正确。groupby('id').cumcount() + 1:cumcount()会对每个分组内的行从0开始计数,加1后得到从1起始的连续编号。
内容的提问来源于stack exchange,提问作者Mike Silver
相关产品推荐
相关产品推荐

