迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

Pandas groupby 计数

作者:迹忆客 最近更新:2023/03/21 浏览次数:

本篇文章解释了如何从 DataFrame.groupby() 方法中获取像 countsummax 等派生组的统计数据。

我们将用上面例子中所示的 automobile_data_df 来解释这些概念。DataFrame 由员工和他们使用的汽车和自行车品牌组成。

import pandas as pd

automobile_data = [['Chevrolet', 'Yamaha'],
                   ['Toyota', 'Ducati'],
                   ['Volkswagen', 'BMW'],
                   ['Cherlovet', 'Kawasaki'],
                   ['Toyota', 'Ducati'],
                   ['Toyota', 'BMW'],
                   ['Volkswagen', 'BMW']]

column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
    automobile_data, index=index_names, columns=column_names)
print(automobile_data_df)

输出:

          Car Brand Motorbike Brand
Steven    Chevrolet          Yamaha
Robert       Toyota          Ducati
Jimmy    Volkswagen             BMW
Mike      Cherlovet        Kawasaki
Phoenix      Toyota          Ducati
Scott        Toyota             BMW
John     Volkswagen             BMW

使用 Series.value_counts() 方法计算唯一行值的数值

如果我们想要一个 DataFrame 中单列的每个唯一值的计数,我们可以使用 Series.value_counts() 方法。

import pandas as pd

automobile_data = [['Chevrolet', 'Yamaha'],
                   ['Toyota', 'Ducati'],
                   ['Volkswagen', 'BMW'],
                   ['Cherlovet', 'Kawasaki'],
                   ['Toyota', 'Ducati'],
                   ['Toyota', 'BMW'],
                   ['Volkswagen', 'BMW']]

column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
    automobile_data, index=index_names, columns=column_names)

print(automobile_data_df["Car Brand"].value_counts())

输出:

Toyota        3
Volkswagen    2
Cherlovet     1
Chevrolet     1
Name: Car Brand, dtype: int64

它将打印 automobile_data_dfCar Brand 列中所有的唯一值及其计数。该方法只适用于我们希望一次只看到一列的数值计数。

使用 DataFrame.groupby() 函数对 DataFrame 组的值进行计数

我们使用 DataFrame.groupby() 函数将一个 DataFrame 分割成多个组,然后使用 size() 方法计算每个创建组的值。

import pandas as pd

automobile_data= [['Chevrolet', 'Yamaha'],
                  ['Toyota','Ducati'],
                  ['Volkswagen','BMW'],
                  ['Cherlovet','Kawasaki'],
                  ['Toyota','Ducati'],
                  ['Toyota','BMW'],
                  ['Volkswagen','BMW']]

column_names=["Car Brand","Motorbike Brand"]
index_names=["Steven","Robert","Jimmy","Mike","Phoenix","Scott","John"]
automobile_data_df=pd.DataFrame(automobile_data,index=index_names,columns=column_names)

group=automobile_data_df.groupby(["Car Brand","Motorbike Brand"])
print(group.size().reset_index(name='counts'))

输出:

    Car Brand Motorbike Brand  counts
0   Cherlovet        Kawasaki       1
1   Chevrolet          Yamaha       1
2      Toyota             BMW       1
3      Toyota          Ducati       2
4  Volkswagen             BMW       2

它打印一个 DatFrame,其中包含了所有来自 automobile_data_dfCar BrandMotorbike Brand 列的值的唯一组合,以及这些组合在 automobile_data_df DataFrame 中出现的次数。

groupby() 方法将 automobile_data_df 分割成组。Car BrandMotorbike Brand 两列数值相同的行将被放置在同一组中。size() 方法会给出每组的值的数量,最后我们根据每组的值的数量生成 DataFrame。

使用 pandas.DataFrame.agg() 方法获取每组的多个统计值

import pandas as pd

automobile_data = [['Chevrolet', 'Yamaha', 4000],
                   ['Toyota', 'Ducati', 5000],
                   ['Volkswagen', 'BMW', 4500],
                   ['Cherlovet', 'Kawasaki', 3800],
                   ['Toyota', 'Ducati', 4500],
                   ['Toyota', 'BMW', 5000],
                   ['Volkswagen', 'BMW', 6000]]

column_names = ["Car Brand", "Motorbike Brand", "Monthly Salary"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
    automobile_data, index=index_names, columns=column_names)

group = automobile_data_df.groupby(["Car Brand", "Motorbike Brand"])

print(group.agg({"Monthly Salary": [min, max, sum]}))

输出:

                           Monthly Salary             
                                      min   max    sum
Car Brand  Motorbike Brand                            
Cherlovet  Kawasaki                  3800  3800   3800
Chevrolet  Yamaha                    4000  4000   4000
Toyota     BMW                       5000  5000   5000
           Ducati                    4500  5000   9500
Volkswagen BMW                       4500  6000  10500

它显示每个生成组的 Monthly Salary 值的最小值、最大值和总和。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:181 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

在 Django 中上传媒体文件

发布时间:2023/05/04 浏览次数:198 分类:Python

在本文中,我们简要介绍了媒体文件以及如何在 Django 项目中操作媒体文件。

Django 返回 JSON

发布时间:2023/05/04 浏览次数:106 分类:Python

在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。

在 Django 中创建对象

发布时间:2023/05/04 浏览次数:59 分类:Python

本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。

在 Django 中为多项选择创建字段

发布时间:2023/05/04 浏览次数:75 分类:Python

在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便