如何从 python 中的顺序变量创建数字类别?
How create number categories from sequential variable in 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.
我查看了 pandas 剪切函数,但它不起作用,因为它创建了文本对象,老实说,我无法编写我需要的参数。
我需要把它变成值因为我要创建索引。我将创建 5 个变量类别,最后我将添加值并创建一个索引。这就是为什么我需要将这些范围转换为数字。
最简单的方法是做一个函数?
我完全迷路了,有人可以帮助我吗?
使用手动生成的数据,pd.cut
带有明确的分箱将 val
变成桶类别。
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
结果是下面table的前两列。如果你想把它们变成某种整数,你可以用 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
正如用户 political scientist 评论的那样,如果您不希望有中间列并且想要任何您想要的标签不一定是这些容器的整数索引,请传递 labels=[0, 1, 2, 3, 4, 5]
(或包含的列表适当的标签)到 pd.cut
.
我已经被锁定了好几天,试图从顺序变量的值聚合中创建一个新的分类变量。 我正在使用 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.
我查看了 pandas 剪切函数,但它不起作用,因为它创建了文本对象,老实说,我无法编写我需要的参数。
我需要把它变成值因为我要创建索引。我将创建 5 个变量类别,最后我将添加值并创建一个索引。这就是为什么我需要将这些范围转换为数字。
最简单的方法是做一个函数?
我完全迷路了,有人可以帮助我吗?
使用手动生成的数据,pd.cut
带有明确的分箱将 val
变成桶类别。
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
结果是下面table的前两列。如果你想把它们变成某种整数,你可以用 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
正如用户 political scientist 评论的那样,如果您不希望有中间列并且想要任何您想要的标签不一定是这些容器的整数索引,请传递 labels=[0, 1, 2, 3, 4, 5]
(或包含的列表适当的标签)到 pd.cut
.