这是我得到的数据帧:

data = {'Year' : [2021, 2021, 2021, 2022, 2022, 2022], 
        'Class':['A', 'A', 'B', 'A', 'C', 'C'], 
        'Animal':['dog|cat|bird', 'cat|dog', 'tiger|dog', 'cat|bird', 'dog|cat|rabbit', 'rabbit|dog|tiger',]}
df = pd.DataFrame(data)

所以df看起来像:

Year Class Animal
2021 A dog|cat|bird
2021 A cat|dog
2021 B tiger|dog
2022 A cat|bird
2022 C dog|cat|rabbit
2022 C rabbit|dog|tiger

我想做的是计算每一年和每一节课上每种动物的数量.例如,我想获得以下数据帧:

Year Class Animal Count
2021 A dog 2
2021 A cat 2
2021 A bird 1
2021 B tiger 1
2021 B dog 1
2022 A cat 1
2022 A bird 1
2022 C dog 2
2022 C cat 1
2022 C rabbit 2
2022 C tiger 1

有人对实现这一目标有什么建议吗?我会非常感激的.

推荐答案

您可以使用一行程序来实现这一点:

(df.assign(Animal=df['Animal'].str.split('|'))     # Create a list using split
  .explode('Animal')                               # Expand that list it rows using explode
  .value_counts(sort=False)                        # Use pd.DataFrame.value_counts 
  .rename('Count')                                 # Rename series
  .reset_index())                                  # Reset to a dataframe

输出:

    Year Class  Animal  Count
0   2021     A    bird      1
1   2021     A     cat      2
2   2021     A     dog      2
3   2021     B     dog      1
4   2021     B   tiger      1
5   2022     A    bird      1
6   2022     A     cat      1
7   2022     C     cat      1
8   2022     C     dog      2
9   2022     C  rabbit      2
10  2022     C   tiger      1

Python相关问答推荐

Pandas基于另一列的价值的新列

如何输入提示抽象方法属性并让mypy高兴?

Plotly Dash函数来切换图形参数-pPython

为什么我的主页不会重定向到详细视图(Django)

如何使用关键参数按列对Pandas rame进行排序

code _tkinter. Tcl错误:窗口路径名称错误.!按钮4"

在应用循环中间保存pandas DataFrame

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

Python 约束无法解决n皇后之谜

使用miniconda创建环境的问题

如何在Windows上用Python提取名称中带有逗号的文件?

输出中带有南的亚麻神经网络

如何制作10,000年及以后的日期时间对象?

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

如何将多进程池声明为变量并将其导入到另一个Python文件

Tkinter菜单自发添加额外项目

lityter不让我输入左边的方括号,'

Flash只从html表单中获取一个值

跳过嵌套JSON中的级别并转换为Pandas Rame

从旋转的DF查询非NaN值