Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以自定义类别代码吗?_Python_Python 3.x_Pandas - Fatal编程技术网

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

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 这给了我类别,但不是根据我想要使用的逻辑

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

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

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世界没有太多限制。谢谢你的启发。