我正在通过Wes的Python For Data Analysis工作,我遇到了一个奇怪的问题,这本书没有解决.
在下面的代码中,基于他的书的第199页,我创建了一个数据框,然后用于pd.cut()创建cat_obj.根据这本书,cat_obj是
"一个特殊的分类对象.您可以将其视为指示bin名称的字符串数组;在内部它包含一个级别数组,指示不同的类别名称以及标签属性中年龄数据的标签"
真棒!但是,如果我使用完全相同的pd.cut()代码(在下面的[5]中)来创建数据框的新列(称为df['cat']),则该列不会被视为特殊的分类变量,而只会被视为常规的pandas系列.
那么,如何在数据框中创建一个被视为分类变量的列?
In [4]:
import pandas as pd
raw_data = {'name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Jacon', 'Ryaner', 'Sone', 'Sloan', 'Piger', 'Riani', 'Ali'],
'score': [25, 94, 57, 62, 70, 25, 94, 57, 62, 70, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['name', 'score'])
bins = [0, 25, 50, 75, 100]
group_names = ['Low', 'Okay', 'Good', 'Great']
In [5]:
cat_obj = pd.cut(df['score'], bins, …Run Code Online (Sandbox Code Playgroud) 我可以在pandas DataFrame中获得一个工资列的boxplot ...
train.boxplot(column='Salary', by='Category', sym='')
Run Code Online (Sandbox Code Playgroud)
...但是我无法弄清楚如何定义"类别"列上使用的索引顺序 - 我想根据另一个标准提供我自己的自定义顺序:
category_order_by_mean_salary = train.groupby('Category')['Salary'].mean().order().keys()
Run Code Online (Sandbox Code Playgroud)
如何将自定义列顺序应用于boxplot列?(除了使用前缀强制排序的丑陋的kludging列名)
'Category'是一个带有27个不同值的字符串列:boxplot.所以它可以很容易地分解['Accounting & Finance Jobs','Admin Jobs',...,'Travel Jobs']
在检查时,限制在内部pd.Categorical.from_array(),它转换列对象而不允许排序:
我想我可以破解pandas boxplot()的自定义版本,或者进入对象的内部.并提交增强请求.
编辑:这个问题出现了大熊猫~0.13,并且可能已被最近的(0.19 +?)版本淘汰,根据@ Cireo的最新答案.