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

2024-09-30 01:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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或类似的东西来分配类别代码?谢谢


Tags: 数据代码分类类别codescataabbb
1条回答
网友
1楼 · 发布于 2024-09-30 01:24:41

如果您知道评级将遵循某种模式(即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)))或限制列表中使用的字母

相关问题 更多 >

    热门问题