分类等级数据(A +,B-等)转换为数值

时间:2018-08-17 23:17:38

标签: python pandas

我有一个DataFrame,其中一栏是成绩数据。其范围从A+AA-等一直到F。这些是形式类别。我想将它们有效地转换成数字,以便最好的成绩得到最高的数字。由于存在13个等级,因此A+的值为13,F的值为1

例如(但使用类别而不是字符串):

grades = ['A+', 'C-', 'F', 'B', 'D-']
students = ['billy', 'bob', 'joe', 'tom', 'jamal']

pd.DataFrame(columns = ['grades'], data = grades, index = students )

我想将此grades1的{​​{1}}列转换为从DataFrame1的数值,对应于13F。我不太确定该怎么做。 A

编辑:这也是多索引数据框。第一个索引是日期,第二个索引是名称,然后是值。

2 个答案:

答案 0 :(得分:2)

您可能想做的是建立一个字典,将每个字母等级映射到一个值。

您可以明确地做到这一点:

gradevalues = {'A+': 13, 'A': 12, …, 'F': 1}

但是最好以编程方式进行操作,因为重复少意味着打错字的位置更少:

grades = 'A+ A A- B+ B B- C+ C C- D+ D D- F'.split()
grades.reverse()
gradevalues = {grade: i for i, grade in enumerate(grades, 1)}
assert gradevalues['F'] == 1
assert gradevalues['A+'] == 13

答案 1 :(得分:2)

将这些值声明为“分类项目”后,大多数问题都会消失。

s = pd.Series(['C+', 'A+', 'D+', 'D', 'D', 'A+', 'C', 'D+', 'C+', 'A+', 'A-', 'F',
       'B', 'D+', 'D-', 'A+', 'A+', 'D-', 'A', 'B-'])

cats = 'A+ A A- B+ B B- C+ C C- D+ D D- F'.split()[::-1]
s = pd.Categorical(s, categories=cats, ordered=True)

s.codes + 1
array([ 7, 13,  4,  3,  3, 13,  6,  4,  7, 13, 11,  1,  9,  4,  2, 13, 13,
        2, 12,  8], dtype=int8)