Pandas–多索引和分组

Pandas–多索引和分组

在这篇文章中,我们将讨论Pandas Dataframe的多索引和Groupby操作。

Multi-index允许你在你的索引中选择多个行和列。它是pandas对象的一个多级或分层的对象。现在有各种多索引的方法,如MultiIndex.from_arrays,MultiIndex.from_tuples,MultiIndex.from_product,MultiIndex.from_frame ,等,这些方法帮助我们从数组、图元、数据帧等创建多个索引。

语法:pandas.MultiIndex(levels=None, codes=None, sortorder=None, names=None, dtype=None, copy=False, name=None, verify_integrity=True)

  • levels : 它是一个数组序列,显示每个级别的唯一标签。
  • 代码:它也是一个数组序列,其中每一层的整数帮助我们指定该位置的标签。
  • sortorder : 可选的int。它可以帮助我们对级别进行按字母顺序排序。
  • dtype :data-type(size of the data which can be of 32 bits or 64 bits)
  • copy : 它是一个布尔类型的参数,默认值为False。它帮助我们复制元数据。
  • verify_integrity : 它是一个布尔类型的参数,默认值为True。它检查级别和代码的完整性,即它们是否有效。

让我们看一些例子来更好地理解这个概念。

示例 1:

在这个例子中,我们将从数组中创建多索引。数组比图元更受欢迎,因为图元是不可改变的,而如果我们想改变数组中某个元素的值,我们可以这样做。所以,让我们来看看代码和它的解释。

在导入所有重要的库之后,我们正在创建一个姓名数组,同时还创建了分数和年龄的数组。现在,在MultiIndex.from_arrays的帮助下,我们将这三个数组结合在一起,使这三个数组中的元素一起形成多个索引。之后,我们将显示上述结果。

# importing pandas library from
# python
import pandas as pd
 
# Creating an array of names
arrays = ['Sohom','Suresh','kumkum','subrata']
 
# Creating an array of ages
age= [10, 11, 12, 13]
 
# Creating an array of marks
marks=[90,92,23,64]
 
# Using MultiIndex.from_arrays, we are
# combining the arrays together along
# with their names and creating multi-index
# with each element from the 3 arrays into
# different rows
pd.MultiIndex.from_arrays([arrays,age,marks], names=('names', 'age','marks'))

输出:

熊猫--多索引和分组

示例 2:

在这个例子中,我们将使用pandas从数据框架中创建多指标。我们将创建手动数据,然后使用pd.dataframe,我们将用这组数据创建一个数据框架。现在,我们将使用多指标语法来创建一个带有数据框架的多指标。

在这个例子中,我们所做的事情与前面的例子相同。不同的是,在上一个例子中,我们从一个数组列表中创建多索引,而在这里,我们使用pd.dataframe创建了一个数据框架,之后,我们使用multiindex.from_frame()从该数据框架中创建多索引,并加上名字。

# importing pandas library from
# python
import pandas as pd
 
# Creating data
Information = {'name': ["Saikat", "Shrestha", "Sandi", "Abinash"],
                
               'Jobs': ["Software Developer", "System Engineer",
                        "Footballer", "Singer"],
                
               'Annual Salary(L.P.A)': [12.4, 5.6, 9.3, 10]}
 
# Dataframing the whole data
df = pd.DataFrame(dict)
 
# Showing the above data
print(df)

输出:

熊猫--多索引和分组

现在使用MultiIndex.from_frame,我们正在用这个数据框架创建多个索引。

# creating multiple indexes from
# the dataframe
pd.MultiIndex.from_frame(df)

输出:

熊猫--多索引和分组

示例 3:

在这个例子中,我们将学习dataframe.set_index([col1,col2,…]),在这里我们将学习多个索引。这是多索引的另一个概念。

在导入所需的库(即pandas)后,我们正在创建数据,然后在pandas.DataFrame的帮助下,将其转换为表格格式。之后,我们使用Dataframe.set_index设置一些列作为索引列(多索引)。Drop参数被保留为false,这样就不会将提到的列作为索引列丢掉,然后append参数被用来将通过的列追加到已经存在的索引列上。

# importing the pandas library
import pandas as pd
 
# making data for dataframing
data = {
    'series': ['Peaky blinders', 'Sherlock', 'The crown',
               'Queens Gambit', 'Friends'],
     
    'Ratings': [4.5, 5, 3.9, 4.2, 5],
     
    'Date': [2013, 2010, 2016, 2020, 1994]
}
 
# Dataframing the whole data created
df = pd.DataFrame(data)
 
# setting first and the second name
# as index column
df.set_index(["series", "Ratings"], inplace=True,
             append=True, drop=False)
# display the dataframe
print(df)

输出:

熊猫--多索引和分组

现在,我们正在以多指标的形式打印数据帧的索引。

print(df.index)

输出:

熊猫--多索引和分组

GroupBy

Pandas中的groupby操作可以帮助我们通过应用一个函数来分割对象,并在此基础上合并结果。根据我们的选择对列进行分组后,我们可以执行各种操作,最终帮助我们分析数据。

语法: DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=<object object>, observed=False, dropna=True)

  • by: 它帮助我们在数据框架中按特定的或多个列进行分组。
  • axis: 它的默认值是0,其中0代表索引,1代表列。
  • level:让我们考虑一下,我们正在处理的数据框架有分层的索引。在这种情况下,level可以帮助我们确定我们正在处理的索引的级别。
  • as_index:它是一个布尔数据类型,默认值为true.它返回带有组标签的对象作为索引。
  • sort:它帮助我们对关键值进行排序。为了获得更好的性能,最好将其保持为false。
  • group_keys: 它也是一个布尔值,默认值为true。它将组键添加到索引中以识别碎片。
  • dropna:它有助于删除数据集中的’NA‘值

示例 1:

在下面的例子中,我们将使用我们创建的数据来探索groupby的概念。让我们进入代码实现。

# importing pandas library
import numpy as np
 
# Creating pandas dataframe
df = pd.DataFrame(
    [
        ("Corona Positive", 65, 99),
        ("Corona Negative", 52, 98.7),
        ("Corona Positive", 43, 100.1),
        ("Corona Positive", 26, 99.6),
        ("Corona Negative", 30, 98.1),
    ],
     
    index=["Patient 1", "Patient 2", "Patient 3",
           "Patient 4", "Patient 5"],
     
    columns=("Status", "Age(in Years)", "Temperature"),
)
 
# show dataframe
print(df)

输出:

熊猫--多索引和分组

现在让我们根据一些特征对它们进行分组。

# Grouping with only status
grouped1 = df.groupby("Status")
 
# Grouping with temperature and status
grouped3 = df.groupby(["Temperature", "Status"])

正如我们所看到的,我们已经根据 “状态 “和 “温度和状态 “将它们分组。现在让我们执行一些功能。

# Finding the mean of the
# patients reports according to
# the status
grouped1.mean()

这将根据 “状态 “创建数值的平均值。

熊猫--多索引和分组

# Grouping temperature and status together
# results in giving us the index values of
# the particular patient
grouped3.groups

输出:

{(98.1, ‘Corona Negative’): [‘Patient 5’], (98.7, ‘Corona Negative’): [‘Patient 2’],

(99.0, ‘Corona Positive’): [‘Patient 1’], (99.6, ‘Corona Positive’): [‘Patient 4’],

(100.1, ‘Corona Positive’): [‘Patient 3’]}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程