Python 我可以自定义类别代码吗?
我在玩弄一些分类数据,叫做“评级”。我的数据如下(在数据框中): 我有大约25个类别。现在,我试图得到一个与这个评级字段相关的对应字段。我想看看这个:Python 我可以自定义类别代码吗?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我在玩弄一些分类数据,叫做“评级”。我的数据如下(在数据框中): 我有大约25个类别。现在,我试图得到一个与这个评级字段相关的对应字段。我想看看这个: 30 29 28 27 26 25 24 23 。。。 最后减到1。到目前为止,我已经测试了这段代码 modDF['Rating'] = modDF['Rating'].astype('category') modDF['RatingCode'] = modDF['Rating'].cat.codes 这给了我类别,但不是根据我想要使用的逻辑
30
29
28
27
26
25
24
23
。。。
最后减到1。到目前为止,我已经测试了这段代码
modDF['Rating'] = modDF['Rating'].astype('category')
modDF['RatingCode'] = modDF['Rating'].cat.codes
这给了我类别,但不是根据我想要使用的逻辑。它看起来几乎像是在工作,但顺序相反,但是带有“+”字符的收视率看起来很奇怪。是否有某种方法可以根据某种vlookup或类似的东西来分配类别代码?谢谢。如果您知道评级将遵循某种模式(即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)
根据您对
评级代码范围的期望,您需要调整反向(范围(等级))
或限制列表理解中使用的字母。如果您知道评级将遵循特定模式(即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
范围的期望,您需要调整反向(范围(等级))
或限制列表理解中使用的字母。这可能需要手动完成。我看不出计算机有什么办法可以知道AAA比BBB好,这比CCC好。我相信计算机可以很容易地将值30映射到AAA,20映射到BBB,10映射到CCC,然后说20比10好,30比20好。我认为手工绘制地图是唯一的方法。这可能需要手工完成。我看不出计算机有什么办法可以知道AAA比BBB好,这比CCC好。我相信计算机可以很容易地将值30映射到AAA,20映射到BBB,10映射到CCC,然后说20比10好,30比20好。我认为手工绘制地图是唯一的方法。哇!那太酷了。我不知道你能做到。我想Python世界没有太多限制。谢谢你的启发。哇!那太酷了。我不知道你能做到。我想Python世界没有太多限制。谢谢你的启发。