将pandas数据帧从分类重塑为计数

And*_*rew 2 python pandas

我正在尝试使用两列重新整形数据框:ID和分类,以便每个唯一的分类值都有一列.

这是我有的:

   ID Animal
    foo cat
    foo dog
    bar cat
    baz cat
    biz dog
    biz cow
    biz dog
Run Code Online (Sandbox Code Playgroud)

这就是我想要的:

ID  cat dog cow
foo 1   1   0
bar 1   0   0
baz 1   0   0
biz 0   1   2
Run Code Online (Sandbox Code Playgroud)

我试过了:

df.groupby(by='ID').count()
Run Code Online (Sandbox Code Playgroud)

这使:

Index Animal
foo 2
bar 1
baz 1
biz 3
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

df.pivot_table(values='Animal')
df.stack(level='Animal')
Run Code Online (Sandbox Code Playgroud)

前者抛出DataError:没有要聚合的数值类型,后者抛出KeyError:Level Animal必须与name相同(None)

Max*_*axU 5

我们可以使用crosstab()方法:

In [17]: pd.crosstab(df.ID, df.Animal).rename_axis(None, axis=1)
Out[17]:
     cat  cow  dog
ID
bar    1    0    0
baz    1    0    0
biz    0    1    2
foo    1    0    1
Run Code Online (Sandbox Code Playgroud)