Pandas 中的分层数据


分层数据通常用于表示嵌套组或类别的多个级别。例如,一家公司可以按职员、部门和地点建立一个人员的层级关系。一个产品可以根据类别和子类别建立一个类别级次。处理分层数据时的其中一个难点是如何以表格格式表示数据,以便于操纵和分析。在本文中,我们将使用 Pandas 内置的方法(如“set_index()”和“groupby()”)来表示分层数据。

使用 Pandas 表示分层数据的 Python 程序

首先,让我们简要讨论一下上文中提到的 Pandas 和其内置方法

Pandas

这是一个用于数据分析和操纵的开源 Python 库。它可以处理关系型和带标注的数据,对指定数据进行各种操作,例如清理、过滤、分组、聚合和合并。这一功能使 Pandas 成为表示分层数据的完美选择。

要使用 Pandas,我们需要使用以下命令将 Pandas 导入到我们的代码中

import pandas as pd

此处,“pd”是我们为方便起见使用的引用名称。

set_index()

它用于通过一列或多列来设置给定 datafram 的索引。我们将在这个程序中使用该方法,以用 MultiIndex 表示指定的分级 dataframe。它跟 dataframe 的名称一起使用。

语法

nameOfDataframe.set_index(nameOfKeys, inplace = True)

参数

nameOfKeys 指定列名称。

inplace 指定是否修改原始 dataframe。它的默认值为 false,而将其设置为 True 时,原始 dataframe 将被永久修改。

groupby()

该方法用于按照指定条件拆分 dataframe。它提供一种处理分级数据的方法,方法是根据特定列的值将其分成明显不同的组。它也跟 dataframe 的名称一起使用。

语法

nameOfDataframe.groupby(nameOfColumn) 

示例 1

下面的示例演示了如何在 Pandas 中使用 MultiIndex 创建分层 DataFrame。

方法

  • 首先,导入 pandas 库。

  • 然后,创建一个名为 'data' 的字典,它包含四个键:'Category'、'Item'、'Price' 和 'Quantity'。每个键都有一个列表作为它的对应值。

  • 根据 'data' 字典创建一个 DataFrame 'df',其中每个键和值都将成为行和列。

  • 现在,将列 'Category' 和 'Item' 设置为 DataFrame 的索引,以创建一个分层索引。此外,将 'in-place' 设置为 true,这表示对 'df' 对象直接进行更改。

  • 最后,打印 DataFrame 以显示分层数据并退出。

import pandas as pd
# Creating a user-defined hierarchical DataFrame
data = {
   'Category': ['Fruit', 'Fruit', 'Vegetable', 'Vegetable'],
   'Item': ['Apple', 'Orange', 'Carrot', 'Broccoli'],
   'Price': [1.0, 0.8, 0.5, 0.7],
   'Quantity': [10, 15, 8, 12]
}
df = pd.DataFrame(data)
# redefining the dataframe based on 'Category' and 'Item'
df.set_index(['Category', 'Item'], inplace = True)
# to show the hierarchical data
print(df)

输出

Category  Item       Price  Quantity             
Fruit     Apple       1.0        10
          Orange      0.8        15
Vegetable Carrot      0.5         8
          Broccoli    0.7        12

示例 2

在下面的示例中,我们将演示在 Pandas 中使用 'groupby()' 方法来根据特定列对数据分组。我们将对前一个示例中使用过的代码进行轻微更改。此处,我们会根据 'Category' 列中的唯一值将数据进行分组。它将为每个唯一类别形成单独的分组。

import pandas as pd
# Creating a user-defined hierarchical DataFrame
data = {
   'Category': ['Fruit', 'Fruit', 'Vegetable', 'Vegetable'],
   'Item': ['Apple', 'Orange', 'Carrot', 'Broccoli'],
   'Price': [1.0, 0.8, 0.5, 0.7],
   'Quantity': [10, 15, 8, 12]
}
df = pd.DataFrame(data)
# redefining the dataframe by grouping based on 'Category'
grouped = df.groupby('Category')
# to display the hierarchical data
for name, group in grouped:
   print(f"Category: {name}") # to represent name of the category 
   print(group) # to print each group
   print()

输出

Category: Fruit
  Category    Item  Price  Quantity
0    Fruit   Apple    1.0        10
1    Fruit  Orange    0.8        15
Category: Vegetable
    Category      Item  Price  Quantity
2  Vegetable    Carrot    0.5         8
3  Vegetable  Broccoli    0.7        12

示例 3

这是另外一个示例,我们在其中再次对第二个示例的代码进行更改。我们将使用 Pandas 中的 groupby() 方法对分层数据分组,并将聚合函数应用到分组后的数据上。agg() 函数采用一个字典作为参数,键是我们想要聚合的列,值是我们想要应用到这些列的聚合函数。结果将存储在一个名为 'grouped' 的新 DataFrame 中。

import pandas as pd
# Creating a user-defined hierarchical DataFrame
data = {
   'Category': ['Fruit', 'Fruit', 'Vegetable', 'Vegetable'],
   'Item': ['Apple', 'Orange', 'Carrot', 'Broccoli'],
   'Price': [1.0, 0.8, 0.5, 0.7],
   'Quantity': [10, 15, 8, 12]
}
df = pd.DataFrame(data)
# redefining the dataframe based on 'Category' and 'Item'
grouped = df.groupby(['Category', 'Item']).agg({'Price': 'sum', 'Quantity': 'sum'})
# to show the dataframe as hierarchical data
print(grouped)

输出

Category  Item       Price  Quantity              
Fruit     Apple       1.0        10
          Orange      0.8        15
Vegetable Broccoli    0.7        12
          Carrot      0.5         8

结论

在本文中,我们学习了 Pandas 中的几个内置方法,如 'set_index()' 和 'groupby()'。这些方法使我们能够轻松表示、处理和分析分层数据。set_index() 方法使用 Multiindex 的概念来表示分层数据,而 groupby() 则拆分 dataframe 进行表示。

更新于:25-Jul-2023

2K+ 读者数

开启你的 职业生涯

通过完成课程获得认证

开始
广告