代码之家  ›  专栏  ›  技术社区  ›  ASH

如何在数据帧中对已排序的ID进行累积计数?

  •  1
  • ASH  · 技术社区  · 1 年前

    我有一个数据帧,看起来像这样。

    import pandas as pd
    
    data = {'ID':[29951,29952,29953,29951,29951],'DESCRIPTION':['IPHONE 15','SAMSUNG S40','MOTOROLA G1000','IPHONE 15','IPHONE 15'],'PRICE_PROVIDER1':[1000.00,1200.00,1100.00,1000.00,1000.00]}
    
    df = pd.DataFrame(data)
    df
    

    enter image description here

    我想添加一个计算唯一ID的新列。最终DF应该是这样的。

    enter image description here

    我原以为会这么简单:

    df['cnt'] = df.groupby('ID').cumcount(ascending=True)
    df
    

    那不是在做我想做的事。

    2 回复  |  直到 1 年前
        1
  •  2
  •   ziying35    1 年前

    试试这个:

    df['cnt'], _ = pd.factorize(df['ID'])
    print(df)
    
    身份证件 说明 价格_供应商1 cnt
    0 29951 iphone15 1000 0
    1. 29952 三星S40 1200 1.
    2. 29953 摩托罗拉G1000 1100 2.
    3. 29951 iphone15 1000 0
    4. 29951 iphone15 1000 0
        2
  •  1
  •   Scott Boston    1 年前

    这是另一种方式:

    df['cnt'] = df['ID'].astype('category').cat.codes
    

    输出:

          ID     DESCRIPTION  PRICE_PROVIDER1  cnt
    0  29951       IPHONE 15           1000.0    0
    1  29952     SAMSUNG S40           1200.0    1
    2  29953  MOTOROLA G1000           1100.0    2
    3  29951       IPHONE 15           1000.0    0
    4  29951       IPHONE 15           1000.0    0