Python:根据已有的a列值添加新列,并将新列的值设置为1或0

2024-09-28 01:33:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为df的数据帧,如下所示:

ticker        class_n  
  1              a
  2              b
  3              c
  4              d
  5              e
  6              f
  7              a
  8              b
  ............................

我想给这个数据帧添加新的列,新的列名称是类的unique category的值(我的意思是没有重复的类)。此外,新列的值为1(如果类n的值与列名相同),其他列的值为0。 例如,作为以下数据帧。我想得到新的数据帧,如下所示:

ticer  class_n   a     b    c   d   e    f   
  1       a      1     0    0   0   0    0
  2       b      0     1    0   0   0    0
  3       c      0     0    1   0   0    0
  4       d      0     0    0   1   0    0    
  5       e      0     0    0   0   1    0
  6       f      0     0    0   0   0    1
  7       a      1     0    0   0   0    0 
  8       b      0     1    0   0   0    0 

我的代码如下:

lst_class = list(set(list(df['class_n'])))
for cla in lst_class:
    df[c] = 0
    df.loc[df['class_n'] is cla, cla] =1 

但有一个错误:

KeyError: 'cannot use a single bool to index into setitem'

谢谢!你知道吗


Tags: 数据代码in名称dfforlistclass
1条回答
网友
1楼 · 发布于 2024-09-28 01:33:32

使用pd.get_dummies

df.join(pd.get_dummies(df.class_n))

   ticker class_n  a  b  c  d  e  f
0       1       a  1  0  0  0  0  0
1       2       b  0  1  0  0  0  0
2       3       c  0  0  1  0  0  0
3       4       d  0  0  0  1  0  0
4       5       e  0  0  0  0  1  0
5       6       f  0  0  0  0  0  1
6       7       a  1  0  0  0  0  0
7       8       b  0  1  0  0  0  0

或者是同样的事情,只是稍微手动一点

f, u = pd.factorize(df.class_n.values)
d = pd.DataFrame(np.eye(u.size, dtype=int)[f], df.index, u)
df.join(d)

   ticker class_n  a  b  c  d  e  f
0       1       a  1  0  0  0  0  0
1       2       b  0  1  0  0  0  0
2       3       c  0  0  1  0  0  0
3       4       d  0  0  0  1  0  0
4       5       e  0  0  0  0  1  0
5       6       f  0  0  0  0  0  1
6       7       a  1  0  0  0  0  0
7       8       b  0  1  0  0  0  0

相关问题 更多 >

    热门问题