📅  最后修改于: 2023-12-03 15:18:52.350000             🧑  作者: Mango
在 Python 中,groupby
函数可用于根据指定的变量对数据进行分组,以便进行聚合等操作。在本文中,我们将介绍如何使用 groupby
函数基于 2 个变量对数据进行分组。
在学习本文之前,您应该了解以下知识:
groupby
函数的基础用法如果您还不了解这些知识,请先学习相关的教程。
在本文中,我们将使用以下示例数据:
import pandas as pd
data = {
'fruit': ['apple', 'orange', 'banana', 'apple', 'apple', 'banana'],
'color': ['red', 'orange', 'yellow', 'red', 'green', 'yellow'],
'price': [1.0, 1.5, 0.5, 1.2, 1.3, 0.6]
}
df = pd.DataFrame(data)
这是一个包含 3 个字段的 DataFrame,其中 fruit
和 color
是分组依据之一,price
是聚合的数值字段。
在学习如何基于 2 个变量进行分组之前,我们先来回顾一下基于单个变量进行分组的方法。假设我们要根据 fruit
字段进行分组,可以这样写:
groups = df.groupby('fruit')
这样就得到了一个 groupby
对象。我们可以通过 groups.groups
属性来查看分组结果:
print(groups.groups)
输出结果为:
{'apple': [0, 3, 4], 'banana': [2, 5], 'orange': [1]}
可以看到,groups
对象中包含 3 个分组('apple', 'banana', 'orange'),每个分组对应的行号在 groups.groups
属性中以列表的形式存储。
接下来,我们将介绍如何基于 2 个变量进行分组。假设我们要根据 fruit
和 color
字段进行分组,可以这样写:
groups = df.groupby(['fruit', 'color'])
这个 groupby
对象中包含多个分组,每个分组由 ('fruit', 'color')
组成,对应的行号列表以字典的形式存储在 groups.groups
属性中:
print(groups.groups)
输出结果为:
{('apple', 'green'): [4], ('apple', 'red'): [0, 3], ('banana', 'yellow'): [2, 5], ('orange', 'orange'): [1]}
可以看到,groups
对象中包含 4 个分组,每个分组由 ('fruit', 'color')
组成,对应的行号列表以字典的形式存储在 groups.groups
属性中。
分组后,我们可以对每个分组执行聚合操作,例如求和、平均数等。在本文中,我们将使用 sum
函数对 price
字段进行求和操作。可以这样写:
result = groups['price'].sum()
这将返回一个新的 DataFrame,其中每行代表一个分组,包含 ('fruit', 'color')
和聚合后的 price
字段。
下面是完整的示例代码和结果:
import pandas as pd
data = {
'fruit': ['apple', 'orange', 'banana', 'apple', 'apple', 'banana'],
'color': ['red', 'orange', 'yellow', 'red', 'green', 'yellow'],
'price': [1.0, 1.5, 0.5, 1.2, 1.3, 0.6]
}
df = pd.DataFrame(data)
groups = df.groupby(['fruit', 'color'])
result = groups['price'].sum()
print(result)
输出结果为:
fruit color
apple green 1.3
red 2.2
banana yellow 1.1
orange orange 1.5
Name: price, dtype: float64
可以看到,对于每个分组,我们得到了 price
字段的总和。例如,组合 ('apple', 'green') 的价格总和为 1.3。