Option 1
get_dummies s groupby+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
Option 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
Option 3
pivot_table with sizehow 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
source
share