【问题标题】:Reordering a DF by category in a preset order按预设顺序按类别重新排序 DF
【发布时间】:2023-01-17 08:04:14
【问题描述】:
df = pd.DataFrame(np.random.randint(0,100,size=(15, 3)), columns=list('NMO'))
df['Catgeory1'] = ['I','I','I','I','I','G','G','G','G','G','P','P','I','I','P']
df['Catgeory2'] = ['W','W','C','C','C','W','W','W','W','W','O','O','O','O','O']

想象这个 df 更大,有更多的类别,我如何对列表进行排序,按照确定的顺序保留任何给定行的所有特征。前任。仅按“category1”对 df 进行排序,这样所有 P 都排在第一位,然后是 I,然后是 G。

【问题讨论】:

    标签: pandas dataframe sorting group-by


    【解决方案1】:

    您可以使用明确的类型:

    cat_type = pd.CategoricalDtype(categories=["P", "I", "G"], ordered=True)
    df['Category1'] = df['Category1'].astype(cat_type)
    
    print(df.sort_values(by='Category1'))
    

    印刷:

         N   M   O Category1 Category2
    10  49  37  44         P         O
    11  72  64  66         P         O
    14  39  98  32         P         O
    0   93  12  89         I         W
    1   20  74  21         I         W
    2   25  22  24         I         C
    3   47  11  33         I         C
    4   60  16  34         I         C
    12   0  90   6         I         O
    13  13  35  80         I         O
    5   84  64  67         G         W
    6   70  47  83         G         W
    7   61  57  76         G         W
    8   19   8   3         G         W
    9    7   8   5         G         W
    

    【讨论】:

      【解决方案2】:

      对于 PIG 顺序(逆字母顺序):

      df.sort_values('Catgeory1',ascending=False)
      

      对于自定义排序:

      df['Catgeory1'] = pd.Categorical(df['Catgeory1'], ['P','G','I'])
      df = df.sort_values('Catgeory1')
      

      【讨论】:

      • 但是,如果我想控制订单怎么办? PIG 或 IPG 或 GIP;或者如果有十几个不同的类别,我想要的任何组合。
      • 我编辑了我的答案,请检查一下。 @巴里迪
      猜你喜欢
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 2015-08-14
      相关资源
      最近更新 更多