将装箱特征转换为数字分类特征的最简单方法是什么?

14ifxucb  于 2022-10-23  发布在  其他
关注(0)|答案(2)|浏览(130)

使用pandas.cut()时,将数字特征转换为分类装箱特征非常简单。但是,如果您想通过将装箱对象特征转换为数字分类特征(1、2、3、4等)来实现相反的目的,那么最简单的方法是什么?
独特的装箱类别:["0-9%", "10-19%", "20-29%", "30-39%", "40-49%", "50-59%", etc...]
为了解决这个问题,有很多方法都是幼稚的。E、 g,使用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......

或者创建一个字典,将每个不同的binned类别作为关键字,并将其索引值用作值:

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]

然而,这两种方法感觉有点幼稚,我很好奇是否有更简单的方法来解决这个问题?

mxg2im7a

mxg2im7a1#

类别中已经有数字信息。
使用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

4nkexdtk

4nkexdtk2#

创建一个字典,显示当前bin和要将其转换为的数字,然后使用replace函数

conversion={"0-9%":1, "10-19%":2, "20-29%":2,.....etc }
df.replace(conversion)

相关问题