繁体   English   中英

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

[英]Python pandas: add new columns based on the existed a column value, and set the value of new columns as 1 or 0

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

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

我想向此数据框添加新列,新列名称是class_n的唯一类别的值(我的意思是不重复class_n)。 此外,新列的值为1(如果class_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'

谢谢!

使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM