Python 熊猫-更改因子类型对象的级别顺序

Python 熊猫-更改因子类型对象的级别顺序,python,pandas,Python,Pandas,我有一个熊猫数据框df,列school作为因子 Name school A An B Bn C Bn 如何在python中将school列的级别从('An','Bn')更改为('Bn','An') R当量为 levels(df$school) = c('Bn','An') 作为一般解决方案,您可以使用字典重新映射: df = pd.DataFrame({'Name': ['A', 'B', 'C'], 'sch

我有一个熊猫数据框
df
,列
school
作为因子

Name    school
A       An
B       Bn
C       Bn
如何在python中将
school
列的级别从('An','Bn')更改为('Bn','An')

R当量为

levels(df$school) = c('Bn','An')

作为一般解决方案,您可以使用字典重新映射:

df = pd.DataFrame({'Name': ['A', 'B', 'C'], 
                   'school': ['An', 'Bn', 'Bn']})
d = {'An': 'Bn', 'Bn': 'An'}
df['school'] = df.school.map(d)
>>> df
  Name school
0    A     Bn
1    B     An
2    C     An
您可以使用(传入已排序的因子):

您可以就地执行此操作:

In [21]: df['school'].cat.reorder_categories(['Bn', 'An'], inplace=True)

In [22]: df['school']
Out[22]:
0    An
1    Bn
2    Bn
Name: school, dtype: category
Categories (2, object): [Bn, An]

.

您可以设置
类别

import pandas as pd

school = pd.Series(["An", "Bn", "Bn"])
school = school.astype("category")

school.cat.categories = ["Bn", "An"]

我对R不太了解,不能说这是否正确,也不能说我的答案是否正确。我想这要看你的意图了!我最初的回答也使用了分类,但我对R也不太熟悉,无法推断OP只是重命名值还是重新排序类别。我想这不是OP想要的
pandas.Series.cat.categories
使用输入列表替换数据集中的值(因此级别
“an”
现在将是
“Bn”
,反之亦然),而问题只是更改级别的顺序。
import pandas as pd

school = pd.Series(["An", "Bn", "Bn"])
school = school.astype("category")

school.cat.categories = ["Bn", "An"]