我正在尝试使用两列重新整形数据框: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)
我们可以使用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)