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 进行表示。