需要 pandas groupby.count() 或 groupby.size.unstack() 来输出我可以使用的数据帧

Need pandas groupby.count() or groupby.size.unstack() to output a dataframe I can use

所以我需要计算每只动物每年某个值出现的次数。我已经设法做到了,但它输出的是单列类型的数据框,而不是工作单元格中的数据。

我用过:

df.groupby(["Animal", "year"])["value"].count()

和:

df.groupby(["Animal", "year", "value"]).size().unstack(fill_value=0)

我尝试了一个数据透视表但它给出了一个错误,在错误消息中它说数据太多但主要错误是“索引包含重复条目”。我有大约 13000 行数据。

我不知道如何处理回复。我不能像使用 Dataframe 那样调用列,我不知道该怎么做。我希望能够在 Dataframe 中创建比例,例如 2020 年动物 1 的值 A 为 10%,值 B 为 90%。

count() 创建了一个系列之后,我尝试执行 df.to_frame(),但它只创建了一个单列 DataFrame。

数据是这样的:

Animal  Year Value
1       2020  A
1       2020  A
1       2019  B
1       2019  B
2       2020  A

我需要它是:

Animal   Year  A  B
 1       2020  2  0
 1       2019  0  2
 2       2020  1  0

但是在一个完整的 4 列数据框中,没有被压缩成一列。然后我可以从那里创建百分比比例。

尝试:

x = df.pivot_table(
    index=["Animal", "Year"], columns="Value", aggfunc="size", fill_value=0
).reset_index()
x.columns.name = None
print(x)

打印:

   Animal  Year  A  B
0       1  2019  0  2
1       1  2020  2  0
2       2  2020  1  0