如何在 python 中从顺序变量创建数字类别?



我已经被锁定了好几天,试图从顺序变量的值聚合中创建一个新的分类变量。 我正在使用Pandas将语法脚本从SPSS迁移到Python。 在 SPSS 中,我使用以下命令来执行我需要的操作:

RECODE QTD_FTE_RAZAO (0=5) (1 thru 3000 = 0) (3000.01 thru 4000 = 1) (4000.01 thru 5000 = 2) (5000.01 thru 10000 = 3) (10000.01 thru 15000 = 4) (15000.01 thru 9999999999 = 5)
INTO COD_FTE_RAZAO.
EXECUTE.

我查看了熊猫剪切函数,但它不起作用,因为它创建文本对象,老实说我无法编写我需要的参数。

我需要将其转换为值,因为我将创建一个索引。我将创建 5 个变量类别,最后我将添加值并创建一个索引。这就是为什么我需要将这些范围转换为数字。

最简单的方法是做一个功能?

我完全迷路了,有人可以帮我吗?

使用手动生成的数据,具有显式箱的pd.cutval转换为存储桶类别。

df = pd.DataFrame([{'val': 5}, {'val': 500},{'val': 5000},{'val': 2000},{'val': 3500},{'val': 6000},{'val': 12000},{'val': 500000}])
df['vars'] = pd.cut(df['val'],bins=[1, 3000, 4000, 5000, 10000, 15000, float('inf')])
df

结果是下表的前两列。如果要将它们转换为某种整数,可以使用df['codes'] = df.vars.cat.codes按索引顺序映射类别。

val                vars  codes
0       5       (1.0, 3000.0]      0
1     500       (1.0, 3000.0]      0
2    5000    (4000.0, 5000.0]      2
3    2000       (1.0, 3000.0]      0
4    3500    (3000.0, 4000.0]      1
5    6000   (5000.0, 10000.0]      3
6   12000  (10000.0, 15000.0]      4
7  500000      (15000.0, inf]      5

正如用户政治学家所评论的那样,如果您不喜欢中间列,并且想要任何您想要的标签,这些标签不一定是这些箱的整数索引,请将labels=[0, 1, 2, 3, 4, 5](或包含适当标签的列表(传递给pd.cut

最新更新