You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中按id分组、排序并为日期添加编号?

解决Pandas分组排序并添加组内序号的问题

需求说明

需要对数据表按id分组,每组内依据number of purchases升序排序,同时给每组添加从1开始的连续编号列rang。

实现步骤与代码

  1. 构造示例数据
    先将你提供的原始数据转换为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)
    
  2. 分组排序并生成序号
    先按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']]
    
  3. 查看最终结果
    打印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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:30:55