Pandas GroupBy

Pandas GroupBy

Groupby是一个相当简单的概念。我们可以创建一个类别的分组,并对这些类别应用一个函数。这是一个简单的概念,但它是一个非常有价值的技术,在数据科学中被广泛使用。在真正的数据科学项目中,你会处理大量的数据,并反复尝试一些东西,所以为了提高效率,我们使用Groupby概念。Groupby概念真的很重要,因为它能够有效地聚合数据,无论是性能还是代码量都很宏大。Groupby主要是指一个涉及一个或多个以下步骤的过程,它们是:。

  • 分割:这是一个过程,我们通过在数据集上应用一些条件将数据分割成组。
  • 应用:这是一个过程,在这个过程中,我们将一个函数独立地应用于每个组。
  • 组合:这是一个过程,我们在应用groupby后将不同的数据集组合起来,并将结果纳入一个数据结构中。

下面的图片将有助于理解Groupby概念中涉及的过程。
1.将团队列中的唯一值分组

Pandas GroupBy

2.现在每组都有一个桶了

Pandas GroupBy

3.将其他数据扔进桶里

Pandas GroupBy

4.在每个桶的重量栏上应用一个函数。

Pandas GroupBy

将数据分割成组

分割是一个过程,我们通过对数据集施加一些条件将数据分割成一组。为了分割数据,我们在数据集上应用某些条件。为了分割数据,我们使用groupby()函数,该函数用于根据某些条件将数据分割成组。Pandas对象可以在其任何一个axis上进行分割。分组的抽象定义是提供一个标签到组名的映射。Pandas数据集可以被分割到它们的任何对象中。有多种方法来分割数据,比如。

  • obj.groupby(key)
  • obj.groupby(key, axis=1)
  • obj.groupby([key1, key2])

注意:在这里我们把分组对象称为键。
用一个键进行数据分组:
为了用一个键对数据进行分组,我们在groupby函数中只传递一个键作为参数。

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们使用groupby()函数对Name的数据进行分组。

# using groupby function
# with one key
 
df.groupby('Name')
print(df.groupby('Name').groups)

输出 :

Pandas GroupBy

现在我们打印所有形成的组中的第一个条目。

# applying groupby() function to
# group the data on Name value.
gk = df.groupby('Name')
   
# Let's print the first entries
# in all the groups formed.
gk.first()

输出 :

Pandas GroupBy

用多个键对数据进行分组:
为了对有多个键的数据进行分组,我们在groupby函数中传递多个键。

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们使用groupby函数中的多个键将 “姓名 “和 “资格 “的数据分组。

# Using multiple keys in
# groupby() function
df.groupby(['Name', 'Qualification'])
 
print(df.groupby(['Name', 'Qualification']).groups)

输出 :

Pandas GroupBy

通过排序键对数据进行分组:
组键默认使用groupby操作进行排序。用户可以通过sort=False来获得潜在的加速。

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32], }
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们应用groupby()而不进行排序

# using groupby function
# without using sort
 
df.groupby(['Name']).sum()

输出 :

Pandas GroupBy

现在我们使用groupby()进行排序,以达到潜在的加速效果

# using groupby function
# with sort
 
df.groupby(['Name'], sort = False).sum()

输出 :

Pandas GroupBy

用对象属性对数据进行分组:
组属性就像字典,其键是计算出的唯一组,相应的值是属于每个组的axis标签。

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们像在字典中那样用键来分组数据。

# using keys for grouping
# data
 
df.groupby('Name').groups

输出 :

Pandas GroupBy

通过小组进行迭代

为了迭代组的一个元素,我们可以通过类似于itertools.obj的对象来迭代。

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们以类似于itertools.obj中的方式来迭代组的一个元素。

# iterating an element
# of group
 
grp = df.groupby('Name')
for name, group in grp:
    print(name)
    print(group)
    print()

输出 :

Pandas GroupBy

现在,我们对包含多个键的组的一个元素进行遍历

# iterating an element
# of group containing
# multiple keys
 
grp = df.groupby(['Name', 'Qualification'])
for name, group in grp:
    print(name)
    print(group)
    print()

输出 :
如输出中所示,组的名称将是元组

Pandas GroupBy

选择一个群体

为了选择一个组,我们可以使用GroupBy.get_group()选择组。我们可以通过应用函数GroupBy.get_group来选择一个组,这个函数选择一个单一的组。

# importing pandas module
import pandas as pd
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们使用Groupby.get_group选择一个单一的组。

# selecting a single group
 
grp = df.groupby('Name')
grp.get_group('Jai')

输出 :

Pandas GroupBy

现在我们选择一个在多列上分组的对象

# selecting object grouped
# on multiple columns
 
grp = df.groupby(['Name', 'Qualification'])
grp.get_group(('Jai', 'Msc'))

输出 :

Pandas GroupBy

将函数应用于组

在将数据分割成一个组后,我们对每个组应用一个函数,以便进行一些操作,它们是。

  • 聚合:这是一个过程,在这个过程中,我们计算每个组的汇总统计(或统计数据)。例如,计算组的总和或平均数
  • 转化:这是一个过程,在这个过程中,我们执行一些针对组的计算,并返回一个类似的索引。例如,在组内用每个组派生的值来填补NAs
  • 过滤:它是一个过程,在这个过程中,我们根据一个评价为真或假的分组计算,放弃一些分组。例如,根据组的总和或平均数过滤掉数据。

Aggregation :
聚合是一个过程,在这个过程中,我们计算出关于每组的汇总统计。聚合函数为每个组返回一个单一的聚合值。在使用groupby函数将数据分割成组后,可以对分组后的数据进行若干聚合操作。
代码#1:通过聚合方法使用聚合功能

# importing pandas module
import pandas as pd
 
# importing numpy as np
import numpy as np
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们使用聚合方法进行聚合

# performing aggregation using
# aggregate method
 
grp1 = df.groupby('Name')
 
grp1.aggregate(np.sum)

输出 :

Pandas GroupBy

现在我们对一个包含多个键的组进行聚合处理

# performing aggregation on
# group containing multiple
# keys
grp1 = df.groupby(['Name', 'Qualification'])
 
grp1.aggregate(np.sum)

输出 :

Pandas GroupBy

同时应用多种功能:
我们可以通过传递一个函数的列表或字典来一次应用多个函数进行聚合,输出一个DataFrame。

# importing pandas module
import pandas as pd
 
# importing numpy as np
import numpy as np
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA']}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们通过传递一个函数列表来应用多个函数。

# applying a function by passing
# a list of functions
 
grp = df.groupby('Name')
 
grp['Age'].agg([np.sum, np.mean, np.std])

输出 :

Pandas GroupBy

将不同的函数应用于DataFrame列:
为了对一个DataFrame的列应用不同的聚合,我们可以传递一个字典来聚合。

# importing pandas module
import pandas as pd
 
# importing numpy as np
import numpy as np
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA'],
        'Score': [23, 34, 35, 45, 47, 50, 52, 53]}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们对数据框架的列应用不同的聚合。

# using different aggregation
# function by passing dictionary
# to aggregate
grp = df.groupby('Name')
 
grp.agg({'Age' : 'sum', 'Score' : 'std'})

输出 :

Pandas GroupBy

Transformation :
转化是一个过程,在这个过程中,我们执行一些特定的分组计算,并返回一个相同索引的。Transform方法返回一个与被分组的对象索引相同(相同大小)的对象。转化函数必须。

  • 返回一个与组块大小相同的结果。
  • 对组块进行逐列操作
  • 不在组块上执行原地操作。
# importing pandas module
import pandas as pd
 
# importing numpy as np
import numpy as np
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA'],
        'Score': [23, 34, 35, 45, 47, 50, 52, 53]}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们进行一些针对组的计算,并返回一个类似于索引的。

# using transform function
grp = df.groupby('Name')
sc = lambda x: (x - x.mean()) / x.std()*10
grp.transform(sc)

输出 :

Pandas GroupBy

Filtration :
过滤是一个过程,在这个过程中,我们根据一个评估为真或假的分组计算,放弃一些分组。为了过滤一个组,我们使用过滤方法并应用一些条件来过滤组。

# importing pandas module
import pandas as pd
 
# importing numpy as np
import numpy as np
  
# Define a dictionary containing employee data
data1 = {'Name':['Jai', 'Anuj', 'Jai', 'Princi',
                 'Gaurav', 'Anuj', 'Princi', 'Abhi'],
        'Age':[27, 24, 22, 32,
               33, 36, 27, 32],
        'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj',
                   'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'],
        'Qualification':['Msc', 'MA', 'MCA', 'Phd',
                         'B.Tech', 'B.com', 'Msc', 'MA'],
        'Score': [23, 34, 35, 45, 47, 50, 52, 53]}
    
  
# Convert the dictionary into DataFrame 
df = pd.DataFrame(data1)
  
print(df)

Pandas GroupBy

现在我们过滤数据,以返回住过两次或更多次的名字。

# filtering data using
# filter data
grp = df.groupby('Name')
grp.filter(lambda x: len(x) >= 2)

输出 :

Pandas GroupBy

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程