Группа Панды

Опубликовано: 28 Марта, 2022

Groupby - это довольно простая концепция. Мы можем создать группу категорий и применить функцию к категориям. Это простая концепция, но это чрезвычайно ценный метод, широко используемый в науке о данных. В реальных проектах по науке о данных вы будете иметь дело с большими объемами данных и пробовать что-то снова и снова, поэтому для повышения эффективности мы используем концепцию Groupby. Концепция Groupby действительно важна, потому что она позволяет эффективно агрегировать данные, как по производительности, так и по объему кода. Groupby в основном относится к процессу, включающему один или несколько из следующих шагов:

  • Разделение: это процесс, в котором мы разделяем данные на группы, применяя некоторые условия к наборам данных.
  • Применение: это процесс, в котором мы применяем функцию к каждой группе независимо.
  • Комбинирование: это процесс, в котором мы объединяем разные наборы данных после применения groupby и получаем структуру данных.

Следующее изображение поможет понять процесс вовлечения в концепцию Groupby.
1. Сгруппируйте уникальные значения из столбца "Команда".

2. Теперь для каждой группы есть ведро.

3. Поместите остальные данные в корзины.

4. Примените функцию к столбцу веса каждого ковша.

Разделение данных на группы

Splitting is a process in which we split data into a group by applying some conditions on datasets. In order to split the data, we apply certain conditions on datasets. In order to split the data, we use groupby() function this function is used to split the data into groups based on some criteria. Pandas objects can be split on any of their axes. The abstract definition of grouping is to provide a mapping of labels to group names. Pandas datasets can be split into any of their objects. There are multiple ways to split data like:

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

Note :In this we refer to the grouping objects as the keys.
Grouping data with one key:
In order to group data with one key, we pass only one key as an argument in groupby function.

# 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) 


Now we group a data of Name using groupby() function.

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

Output :

 
Now we print the first entries in all the groups formed.

# 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() 

Output :

 
Grouping data with multiple keys :
In order to group data with multiple keys, we pass multiple keys in groupby function.

# 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) 


Now we group a data of “Name” and “Qualification” together using multiple keys in groupby function.

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

Output :

 
Grouping data by sorting keys :
Group keys are sorted by default uring the groupby operation. User can pass sort=False for potential speedups.

# 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) 


Now we apply groupby() without sort

Output :

Now we apply groupby() using sort in order to attain potential speedups

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

Output :

 
Grouping data with object attributes :
Groups attribute is like dictionary whose keys are the computed unique groups and corresponding values being the axis labels belonging to each 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) 


Now we group data like we do in a dictionary using keys.

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

Выход :

Итерация по группам

In order to iterate an element of groups, we can iterate through the object similar to 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) 


Now we iterate an element of group in a similar way we do in itertools.obj.

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

Output :

Now we iterate an element of group containing multiple keys

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

Выход :
Как показано в выходных данных, имя группы будет кортежем.

Выбор группы

In order to select a group, we can select group using GroupBy.get_group(). We can select a group by applying a function GroupBy.get_group this function select a single 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) 


Now we select a single group using Groupby.get_group.

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

Output :

Now we select an object grouped on multiple columns

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

Выход :

Применение функции к группе

После разделения данных на группу мы применяем функцию к каждой группе, чтобы сделать это, мы выполняем некоторые операции, которыми они являются:

  • Агрегация: это процесс, в котором мы вычисляем сводную статистику (или статистику) по каждой группе. Например, вычислить групповые суммы или средние значения.
  • Преобразование: это процесс, в котором мы выполняем некоторые вычисления, относящиеся к группе, и возвращаем подобный индексированный. Например, заполнение НП внутри групп значением, полученным из каждой группы.
  • Фильтрация: это процесс, в котором мы отбрасываем некоторые группы в соответствии с групповым вычислением, которое оценивает True или False. Например, фильтрация данных на основе групповой суммы или среднего значения.

 
Aggregation :
Aggregation is a process in which we compute a summary statistic about each group. Aggregated function returns a single aggregated value for each group. After splitting a data into groups using groupby function, several aggregation operations can be performed on the grouped data.
Code #1: Using aggregation via the aggregate method

# 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) 


Now we perform aggregation using aggregate method

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

Output :

Now we perform aggregation on agroup containing multiple keys

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

Output :

 
Applying multiple functions at once :
We can apply a multiple functions at once by passing a list or dictionary of functions to do aggregation with, outputting a 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) 


Now we apply a multiple functions by passing a list of functions.

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

Output :

 
Applying different functions to DataFrame columns :
In order to apply a different aggregation to the columns of a DataFrame, we can pass a dictionary to aggregate .

# 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) 


Now we apply a different aggregation to the columns of a dataframe.