DataFrame.groupby(self, by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs) [source]
使用映射器或按Series列对DataFrame或Series进行分组。
分组操作涉及拆分对象,应用功能以及组合结果的某种组合。这可用于对大量数据进行分组并在这些组上进行计算操作。
参数: | by : 映射,功能,标签或标签列表 用于确定分组依据的分组。如果by是函数, 则在对象索引的每个值上调用它。 如果通过了 则将使用Series或dict VALUES来确定组 (将Series的值首先对齐;请参见 如果传递了 标签或标签列表可以按中的列传递给分组self。 注意,元组被解释为(单个)key。 axis : { 沿 level : int,level名称或此类的序列,默认为 如果axis是MultiIndex(分层), 则按一个或多个特定级别分组。 as_index : bool,默认为 对于聚合输出,返回带有组标签的对象作为索引。 仅与DataFrame输入有关。
sort : 布尔值,默认为True 排序组键。关闭此功能可获得更好的性能。请注意, 这不会影响每个组中观察的顺序。 Groupby保留每个组中行的顺序。 group_keys : 布尔值,默认为 调用apply时,将组键添加到索引以识别片段。 squeeze : 布尔值,默认为 如果可能,请减小返回类型的维数, 否则返回一致的类型。 observed : 布尔值,默认为 仅当任何groupers为分类者时才适用。如果为 仅显示分类groupers的观测值。 如果为 0.23.0版中的新功能。 **kwargs 可选,仅接受关键字参数"mutated"并传递给 |
返回值: |
依赖于调用对象, 并返回包含有关组信息的groupby对象。 |
例子
1)基本的分组与聚合
import pandas as pd # 创建示例 DataFrame data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'], 'Value': [10, 20, 30, 40, 50, 60]} df = pd.DataFrame(data) # 按 Category 列进行分组,并求 Value 列的总和 grouped = df.groupby('Category')['Value'].sum() print(grouped)
2)按多个列分组
import pandas as pd # 创建示例 DataFrame data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'], 'Value': [10, 20, 30, 40, 50, 60]} df = pd.DataFrame(data) # 创建一个包含多个分组列的数据 df['SubCategory'] = ['X', 'X', 'Y', 'Y', 'X', 'Y'] # 按 Category 和 SubCategory 列分组 grouped = df.groupby(['Category', 'SubCategory'])['Value'].sum() print(grouped)
3)使用多个聚合函数
import pandas as pd # 创建示例 DataFrame data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'], 'Value': [10, 20, 30, 40, 50, 60]} df = pd.DataFrame(data) # 应用多个聚合函数,如 sum, mean, max grouped = df.groupby('Category')['Value'].agg(['sum', 'mean', 'max']) print(grouped)
4)使用 transform()
进行分组转换
import pandas as pd # 创建示例 DataFrame data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'], 'Value': [10, 20, 30, 40, 50, 60]} df = pd.DataFrame(data) # 使用 transform() # 将每个分组的值标准化(减去均值,除以标准差) df['Normalized'] = df.groupby('Category')['Value'].transform( lambda x: (x - x.mean()) / x.std()) print(df)
5)使用 filter()
过滤分组
import pandas as pd # 创建示例 DataFrame data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'], 'Value': [10, 20, 30, 40, 50, 60]} df = pd.DataFrame(data) # 过滤掉 Value 总和小于 50 的分组 filtered = df.groupby('Category').filter(lambda x: x['Value'].sum() > 50) print(filtered)