我已经被锁定了好几天,试图从顺序变量的值聚合中创建一个新的分类变量。 我正在使用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.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
结果是下表的前两列。如果要将它们转换为某种整数,可以使用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
。