使用pandas.cut((时,将数字特征转换为分类装箱特征非常简单。但是,如果您想通过将装箱对象特征转换为数字分类特征(1、2、3、4…等(来实现相反的效果,那么最简单的方法是什么?
不同的装箱类别:["0-9%", "10-19%", "20-29%", "30-39%", "40-49%", "50-59%", etc...]
有许多方法可以解决这个问题。例如,使用if语句运行for循环:
temp = []
for i in list1:
if i == "0-9%":
temp.append(1)
elif i == "10-19%":
temp.append(2)
elif i == "20-29%":
temp.append(3)
etc......
或者通过创建一个字典,将每个不同的分类作为关键字,并使用它们的索引值作为值:
temp = {}
for v, k in enumerate(pd.unique(list1)):
temp[k] = v+1 # +1 just to skip first value 0
list1 = [temp[bin] for bin in list1]
然而,这两种方法感觉有点天真,我很好奇这个问题是否有更简单的解决方案?
分类中已经有一个数字信息。
使用cat.codes
访问它:
df = pd.DataFrame({'val': range(1,40,7)})
bins = [0,10,20,30,40]
labels = ["0-9%", "10-19%", "20-29%", "30-39%"]
df['cat'] = pd.cut(df['val'], bins=bins, labels=labels)
df['code'] = df['cat'].cat.codes.add(1)
print(df)
输出:
val cat code
0 1 0-9% 1
1 8 0-9% 1
2 15 10-19% 2
3 22 20-29% 3
4 29 20-29% 3
5 36 30-39% 4
如果输入不是Categorical,则需要使用factorize
。
创建一个字典,显示当前bin和要将其转换为的数字,然后使用替换函数
conversion={"0-9%":1, "10-19%":2, "20-29%":2,.....etc }
df.replace(conversion)