pandas.DataFrame.groupby #

数据框。groupby ( by = None , axis = _NoDefault.no_default , level = None , as_index = True , sort = True , group_keys = True , Observed = _NoDefault.no_default , dropna = True ) [来源] #

使用映射器或一系列列对 DataFrame 进行分组。

groupby 操作涉及分割对象、应用函数以及组合结果的某种组合。这可用于对大量数据进行分组并在这些组上进行计算操作。

参数
通过映射、函数、标签、pd.Grouper 或此类列表

用于确定 groupby 的组。如果by是一个函数,则会在对象索引的每个值上调用它。如果传递了字典或系列,则系列或字典值将用于确定组(系列的值首先对齐;请参阅.align()方法)。如果传递长度等于所选轴的列表或 ndarray(请参阅groupby 用户指南),则按原样使用这些值来确定组。标签或标签列表可以传递给 group by 中的列self。请注意,元组被解释为(单个)键。

{0 或 'index', 1 或 'columns'}, 默认 0

沿行 (0) 或列 (1) 分割。对于系列,此参数未使用,默认为 0。

自版本 2.1.0 起已弃用:将在未来版本中删除并表现得类似于 axis=0。对于axis=1frame.T.groupby(...)改为执行。

level int,级别名称或此类序列,默认 None

如果轴是 MultiIndex(分层),则按特定级别或多个级别进行分组。不要同时指定bylevel

as_index bool, 默认 True

返回以组标签作为索引的对象。仅与 DataFrame 输入相关。 as_index=False 实际上是“SQL 风格”的分组输出。此参数对过滤(请参阅用户指南中的过滤)没有影响,例如head()tail()nth()转换(请参阅用户指南中的转换)。

排序bool,默认 True

对组键进行排序。关闭此功能可获得更好的性能。请注意,这不会影响每组内的观察顺序。 Groupby 保留每个组内行的顺序。如果为 False,则组将以与原始 DataFrame 中相同的顺序出现。此参数对过滤(请参阅用户指南中的过滤)没有影响,例如head()tail()nth()转换(请参阅用户指南中的转换)。

在版本 2.0.0 中进行了更改:使用有序分类石斑鱼指定sort=False将不再对值进行排序。

group_keys bool, 默认 True

当调用 apply 并且by参数产生类似索引(即转换)结果时,将组键添加到索引以识别片段。默认情况下,当结果的索引(和列)标签与输入匹配时,不包含组键,否则包含组键。

在版本 1.5.0 中更改:当结果是类似索引的 Series 或 DataFramegroup_keys时,将不再忽略警告。明确apply指定group_keys是否包含组键。

版本 2.0.0 中更改:group_keys现在默认为True.

观察到的布尔值,默认 False

这仅适用于任何石斑鱼是分类的。如果为 True:仅显示分类石斑鱼的观察值。如果为 False:显示分类石斑鱼的所有值。

自 2.1.0 版本起已弃用:在 pandas 的未来版本中,默认值将更改为 True。

dropna bool,默认 True

如果为 True,并且组键包含 NA 值,则 NA 值与行/列一起将被删除。如果为 False,NA 值也将被视为组中的键。

返回
pandas.api.typing.DataFrameGroupBy

返回包含有关组的信息的 groupby 对象。

也可以看看

resample

时间序列频率转换和重采样的便捷方法。

笔记

有关更详细的用法和示例,请参阅用户指南,包括将对象拆分为组、迭代组、选择组、聚合等。

例子

>>> df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
...                               'Parrot', 'Parrot'],
...                    'Max Speed': [380., 370., 24., 26.]})
>>> df
   Animal  Max Speed
0  Falcon      380.0
1  Falcon      370.0
2  Parrot       24.0
3  Parrot       26.0
>>> df.groupby(['Animal']).mean()
        Max Speed
Animal
Falcon      375.0
Parrot       25.0

层次索引

我们可以使用level参数对分层索引的不同级别进行分组:

>>> arrays = [['Falcon', 'Falcon', 'Parrot', 'Parrot'],
...           ['Captive', 'Wild', 'Captive', 'Wild']]
>>> index = pd.MultiIndex.from_arrays(arrays, names=('Animal', 'Type'))
>>> df = pd.DataFrame({'Max Speed': [390., 350., 30., 20.]},
...                   index=index)
>>> df
                Max Speed
Animal Type
Falcon Captive      390.0
       Wild         350.0
Parrot Captive       30.0
       Wild          20.0
>>> df.groupby(level=0).mean()
        Max Speed
Animal
Falcon      370.0
Parrot       25.0
>>> df.groupby(level="Type").mean()
         Max Speed
Type
Captive      210.0
Wild         185.0

我们还可以通过设置 dropna参数来选择是否在组键中包含 NA ,默认设置为True

>>> l = [[1, 2, 3], [1, None, 4], [2, 1, 3], [1, 2, 2]]
>>> df = pd.DataFrame(l, columns=["a", "b", "c"])
>>> df.groupby(by=["b"]).sum()
    a   c
b
1.0 2   3
2.0 2   5
>>> df.groupby(by=["b"], dropna=False).sum()
    a   c
b
1.0 2   3
2.0 2   5
NaN 1   4
>>> l = [["a", 12, 12], [None, 12.3, 33.], ["b", 12.3, 123], ["a", 1, 1]]
>>> df = pd.DataFrame(l, columns=["a", "b", "c"])
>>> df.groupby(by="a").sum()
    b     c
a
a   13.0   13.0
b   12.3  123.0
>>> df.groupby(by="a", dropna=False).sum()
    b     c
a
a   13.0   13.0
b   12.3  123.0
NaN 12.3   33.0

使用 时.apply(),用于group_keys包含或排除组键。该group_keys参数默认为True(包括)。

>>> df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
...                               'Parrot', 'Parrot'],
...                    'Max Speed': [380., 370., 24., 26.]})
>>> df.groupby("Animal", group_keys=True)[['Max Speed']].apply(lambda x: x)
          Max Speed
Animal
Falcon 0      380.0
       1      370.0
Parrot 2       24.0
       3       26.0
>>> df.groupby("Animal", group_keys=False)[['Max Speed']].apply(lambda x: x)
   Max Speed
0      380.0
1      370.0
2       24.0
3       26.0