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

我可以自定义类别代码吗?

  •  0
  • ASH  · 技术社区  · 5 年前

    我在玩弄一些分类数据,叫做“评级”。我的数据如下(在数据框中):

    AAA
    AA
    A
    A+
    BBB
    BB
    B
    B+
    

    我有大约25个类别。现在,我试图得到一个与这个评级字段相关的对应字段。我想看看这个:

    30
    29
    28
    27
    26
    25
    24
    23
    

    ... 最后减到1。到目前为止,我已经测试了这段代码。

    modDF['Rating'] = modDF['Rating'].astype('category')
    modDF['RatingCode'] = modDF['Rating'].cat.codes
    

    这给了我类别,但不是根据我想要使用的逻辑。它看起来几乎像是在工作,但顺序相反,但是带有“+”字符的收视率看起来很奇怪。是否有某种方法可以根据某种vlookup或类似的东西来分配类别代码?谢谢

    0 回复  |  直到 5 年前
        1
  •  2
  •   RubenB    5 年前

    如果您知道评级将遵循某种模式(即XXX、XX、XX、X+),您可以执行以下操作:

    import pandas as pd
    import itertools
    import string
    
    # df with dummy data
    df = pd.DataFrame(['AAA', 'AA', 'A', 'A+', 'BBB', 'BB', 'B', 'B+'], columns=['Ratings'])
    
    # collect ratings and assign a decreasing value to them
    ratings = [[letter*3, letter*2, letter, letter+'+'] for letter in string.ascii_uppercase]  # create all possible ratings in order
    ratings = list(itertools.chain.from_iterable(ratings))  # flatten list
    ratings_code = dict(zip(ratings, reversed(range(len(ratings)))))
    
    # map rating code to original rating
    df['RatingCode'] = df.Ratings.map(ratings_code)
    

    取决于您对产品范围的期望 RatingCode ,你需要调整 reversed(range(len(ratings)))