如何获得一个热编码向量,如下表所示

lea*_*ner 4 python pandas

我试图以下面的形式得到我的表.出于某种原因,我无法使我的枢轴代码工作.

df = pd.DataFrame([('a','f1'), ('a','f2'),('a','f3') ,('b','f4'),('c','f2'), ('c','f4')], columns = ['user', 'val'])


df 
---
user    val
a      f1
a      f2
a      f3
b      f4
c      f2
c      f4 


>> output 

user    f1  f2  f3  f4
a       1   1   1   0
b       0   0   0   1
c       1   0   1   0
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 5

选项1
get_dummiesgroupby+sum

df.set_index('user').val.str.get_dummies().sum(level=0)

      f1  f2  f3  f4
user                
a      1   1   1   0
b      0   0   0   1
c      0   1   0   1
Run Code Online (Sandbox Code Playgroud)

选项2
groupby + value_counts+unstack

df.groupby('user').val.value_counts().unstack(fill_value=0)

val   f1  f2  f3  f4
user                
a      1   1   1   0
b      0   0   0   1
c      0   1   0   1
Run Code Online (Sandbox Code Playgroud)

方案3
pivot_tablesize作为aggfunc.

df.pivot_table(index='user', columns='val', aggfunc='size', fill_value=0)

val   f1  f2  f3  f4
user                
a      1   1   1   0
b      0   0   0   1
c      0   1   0   1
Run Code Online (Sandbox Code Playgroud)