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

python pandas groupby和分类列的最大值

  •  1
  • beta  · 技术社区  · 6 年前

    我有一个熊猫数据框架,如下所示:

    ID  Cat
    1   SF
    1   W
    1   F
    2   R64
    2   SF
    2   F
    

    第一列是标识符,第二列包含分类数据,其顺序如下: R64 < SF < F < W

    我想要一个新的数据帧,它包含每个ID的最大分类值。生成的数据框应如下所示:

    ID  Cat
    1   W
    2   F
    

    我尝试了解决方案 this thread 但它似乎不适用于分类数据: df.groupby("ID", as_index=False).Cat.max()

    这种方法的结果如下:

    ID  number
    1   SF
    2   SF
    

    我这样声明分类列:

    df['Cat'] = pd.Categorical(df['Cat'], categories = ["R64", "SF", "F", "W"], ordered = True)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   cs95 abhishek58g    6 年前

    df.Cat = pd.Categorical(
        df.Cat, categories=['R64', 'SF', 'F', 'W'], ordered=True)
    

    groupby

    df.groupby('ID').Cat.max().reset_index()
    
       ID Cat
    0   1   W
    1   2   F
    

    sort_values head

    df.sort_values(['ID', 'Cat'], ascending=[True, False]).groupby('ID').head(1)
    
       ID Cat
    1   1   W
    5   2   F