Python中的Pandas DataFrame groupby()方法

Pandas DataFrame groupby()方法用于根据某些条件将特定数据集的数据分为几组。 groupby()函数在任意轴上拆分数据。 DataFrame groupby()函数涉及对象的拆分,应用某些函数,然后合并结果。通常对最后一组数据执行此操作,以对数据进行聚类并从数据中获取有意义的见解。

了解熊市猫DataFrame groupby()

让我们看一下.groupby()方法本身。

import pandas as pd

dataset = {
    'Name': ['Rohit', 'Arun', 'Sohit', 'Arun', 'Shubh'],
    'Roll no': ['01', '02', '03', '04', '05'],
    'maths': ['93', '63', '74', '94', '83'],
    'science': ['88', '55', '66', '94', '35'],
    'english': ['93', '74', '84', '92', '87']}

df = pd.DataFrame(dataset)
by_name = df.groupby(['Name'])
print(by_name)

输出量

在输出中,DataFrameGroupBy是什么?它是.__ str __(),不会为您提供很多有关其内容或工作方式的信息。 DataFrameGroupBy对象在缠头方面可能具有挑战性,原因是它很懒。除非您这么说,否则它不会做任何操作来产生有用的结果。

.groupby()方法中经常使用的一个术语是split-apply-combine。这是指以下三个步骤的链:

  1. 将DataFrame分成几组。
  2. 对每个较小的DataFrame进行一些操作。
  3. 合并结果。

检查df.groupby(“ Name”)可能是具有挑战性的,因为在您对结果对象执行某些操作之前,它实际上不执行任何这些操作。同样,Pandas GroupBy对象是惰性的。它几乎延迟了split-apply-combine进程的任何部分,直到您对其调用方法为止。

因此,如果看不到任何分离的阶段,如何分离,应用和合并阶段?检查Pandas GroupBy对象并查看拆分的一种有用方法是遍历该对象。这是在DataFrameGroupBy .__ iter __()中实现的,并为DataFrames输出(组,DataFrame)对的迭代器。

import pandas as pd

dataset = {
    'Name': ['Rohit', 'Arun', 'Sohit', 'Arun', 'Shubh'],
    'Roll no': ['01', '02', '03', '04', '05'],
    'maths': ['93', '63', '74', '94', '83'],
    'science': ['88', '55'a '66', '94', '35'],
    'english': ['93', '74', '84', '92', '87']}

df = pd.DataFrame(dataset)
by_name = df.groupby(['Name'])

for Name, maths in by_name:
    print(f"First 2 entries for {Name!r}")
    print("------------------------")
    print(maths.head(2), end="nn")

输出量

First 2 entries for 'Arun'
------------------------
   Name Roll no maths science english
1  Arun      02    63      55      74
3  Arun      04    94      94      92

First 2 entries for 'Rohit'
------------------------
    Name Roll no maths science english
0  Rohit      01    93      88      93

First 2 entries for 'Shubh'
------------------------
    Name Roll no maths science english
4  Shubh      05    83      35      87

First 2 entries for 'Sohit'
------------------------
    Name Roll no maths science english
2  Sohit      03    74      66      84

如果您要解决棘手的汇总问题,那么遍历Pandas GroupBy对象可能是可视化split-apply-combine拆分部分的一种重要方法。

很少有其他方法和属性可以让您查看各个组及其拆分。 .groups属性将为您提供{group Name:group label}对的字典。

现在,让我们回到其语法。

句法

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)

参量

groupby()函数包含7个参数。

  1. by:用于确定groupby()函数的组。其默认值为none。它是映射功能。
  2. 轴:采用整数值;默认情况下为0。
  3. 级别:如果轴是分层的MultiIndex,则按特定级别或多个级别进行分组。
  4. as_index:它是布尔数据类型。对于聚合输出,我们返回带有组标签的对象作为索引。它仅与DataFrame输入有关。
  5. sort:对组键进行排序。通过关闭此功能,我们可以获得更好的性能。
  6. group_keys:也是布尔数据类型,默认值为true。调用apply时,将组键添加到索引以识别片段。
  7. 压缩:默认情况下,它也是布尔数据类型,为False。如果可能的话,它减小了返回类型的维数。否则,它将返回一致的类型。

返回值

groupby()函数返回一个groupby对象,该对象包含有关不同组的信息。

熊市猫DataFrame groupby()上的示例程序

编写一个程序来演示groupby()方法在Python中的工作。

import pandas as pd

dataset = {
    'Name': ['Rohit', 'Mohit', 'Sohit', 'Arun', 'Shubh'],
    'Roll no': ['01', '02', '03', '04', '05'],
    'Maths': ['93', '63', '74', '94', '83'],
    'Science': ['88', '55', '66', '94', '35'],
    'English': ['93', '74', '84', '92', '87']
}

df = pd.DataFrame(dataset)
group = df.groupby('Roll no')
print(group.first())

输出量

Name Maths Science English
Roll no
01       Rohit    93      88      93
02       Mohit    63      55      74
03       Sohit    74      66      84
04        Arun    94      94      92
05       Shubh    83      35      87

在上面的示例中,我们可以看到有一个包含学生数据的数据集,并且我们已经根据Roll No对数据进行了分组。

编写程序以按多列对数据进行分组。

import pandas as pd

dataset = {
    'Name': ['Rohit', 'Arun', 'Sohit', 'Arun', 'Shubh'],
    'Roll no': ['01', '02', '03', '04', '05'],
    'maths': ['93', '63', '74', '94', '83'],
    'science': ['88', '55', '66', '94', '35'],
    'english': ['93', '74', '84', '92', '87']}

df = pd.DataFrame(dataset)
group = df.groupby(['Name', 'Roll no'])
print(group.first())

输出量

maths science english
Name  Roll no
Arun  02         63      55      74
      04         94      94      92
Rohit 01         93      88      93
Shubh 05         83      35      87
Sohit 03         74      66      84

在上面的示例中,我们可以看到我们已经完成了对多列的分组,即Name和RollNo。在这里,我们可以看到班上有2个Arun,它们的掷骰数不同;因此,将相应地进行分组。

在Jupyter Notebook上学习Pandas df.groupby()

Anaconda的Jupyter Notebook是从事机器学习和数据科学工作的重要工具之一。我们将根据外部CSV数据创建一个DataFrame,然后使用groupby方法根据不同的要求获取数据。

您可以从此处下载外部文件。

现在,我们将使用以下两个数据集。

  1. rating.csv
  2. Cuisine.csv

因此,我们将根据这些CSV数据创建两个DataFrame。

让我们导入Pandas并使用Pandas read_csv()方法创建第一个DataFrame。

import pandas as pd

现在,创建等级_frame DataFrame。

ratings_frame = pd.read_csv('ratings.csv')
ratings_frame.head()

运行单元格,您将获得以下输出。

在熊市猫中创建两个数据框

下一步是创建一个Cuisine_frame数据框。

cuisine_frame = pd.read_csv('cuisine.csv')
cuisine_frame.head()

从字典创建一个DataFrame

从DataFrame输出中,您可以看到两个DataFrame通过placeID连接。

如果您学习过SQL,则可以回顾主键和外键的概念。

因此,等级_frame中的外键是placeID。

现在,让我们计算一下前五个PlaceID的评分。

rating_frame包含我们需要的所有数据。因此,让我们使用groupby()函数来明智地计算评级placeID。

ratings_count = pd.DataFrame(ratings_frame.groupby('placeID')['rating'].count())
ratings_count.head()

使用Pandas groupby获取计数

您调用.groupby()方法并传递要分组的列的名称,即“ placeID”。然后,您使用 [“rating”] 定义必须对其进行实际聚合的列。

作为第一个参数,您不仅可以将单个列名传递给.groupby()方法,还可以执行更多操作。您也可以引用以下任何一项:

  1. 多个列名称的列表
  2. 字典或熊市猫系列
  3. NumPy数组或Pandas索引,或者这些数组的可迭代数组

您可以看到我们已经获取了前五个placeID的评分计数。

类似的SQL查询如下所示。

SELECT placeID, count(rating)
FROM df
GROUP BY placeID;

Pandas GroupBy与SQL

通常,将聚合容量与SQL中的GROUP BY子句进行比较。但是,DataFrame中的SQL GROUP BY和groupby()的操作方式有所不同。

与SQL不同,Pandas groupby()方法没有序数位置引用的概念。因此,您将需要按名称显式引用分组键。

Pandas DataFrame在处理,重塑和修改数据方面具有多种用途。 DataFrame的突出特点之一是其聚合数据的能力。

熊市猫GroupBy对象方法

  1. 汇总方法会将许多数据点“吸引”到有关这些数据点的汇总统计信息中。例如,您可以取10个数字的总和,平均值或中位数,而结果只是一个数字。
  2. 筛选器方法将带回原始DataFrame的子集。这通常意味着使用.filter()方法基于有关该组及其子表的一些临时统计信息来删除整个组。在该定义下包括几种从每个组中排除特定行的方法也很有意义。
  3. 转换方法返回与原始形状和索引相同但具有不同值的DataFrame。通过聚合和过滤方法,生成的DataFrame通常会比输入DataFrame小。对于转换而言,情况并非如此,该转换本身会转换单个值,但保留原始DataFrame的形状。
  4. 元方法与您在其上调用.groupby()的原始对象的关系较少,而更侧重于为您提供高级信息,例如组数和这些组的索引。
  5. 绘制方法模仿Pandas Series或DataFrame的绘制API,但通常将输出分成多个子图。

最后,Pandas DataFrame groupby()示例结束。

也可以看看

熊市猫DataFrame drop()

熊市猫DataFrame count()

熊市猫DataFrame位置

熊市猫DataFrame reset_index()

熊市猫DataFrame describe()

资讯来源:由0x资讯编译自APPDIVIDEND,版权归作者Ankit Lathiya所有,未经许可,不得转载
你可能还喜欢