pandas.DataFrame.groupby#

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=NoDefault.no_default, squeeze=NoDefault.no_default, observed=False, dropna=True)[源代码]#

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

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

参数
by映射、函数、标签或标签列表

用于确定Groupby的组。如果 by 是一个函数,它在对象索引的每个值上被调用。如果传递了DICT或Series,则将使用Series或Dict值来确定组(首先对齐序列的值;请参见 .align() 方法)。如果传递了长度等于所选轴的列表或ndarray(请参见 groupby user guide ),则按原样使用这些值来确定组。标签或标签列表可以传递给GROUP BY self 。请注意,元组被解释为(单个)键。

axis{0或‘index’,1或‘Columns’},默认为0

沿行(0)或列(1)拆分。

levelInt、级别名称或其序列,默认为无

如果轴是多索引(分层),则按一个或多个特定级别分组。

as_index布尔值,默认为True

对于聚合输出,返回以组标签作为索引的对象。仅与DataFrame输入相关。AS_INDEX=FALSE实际上是“SQL风格”的分组输出。

sort布尔值,默认为True

对组键进行排序。通过关闭此选项可获得更好的性能。注意:这不会影响每组内观察的顺序。Groupby保留每个组中行的顺序。

group_keys布尔值,可选

调用Apply时,将组键添加到索引以标识条目。默认情况下,当结果的索引(和列)标签与输入匹配时,不包括组键,否则包括组键。

在 1.5.0 版更改: 警告说 group_keys 的结果时将不再被忽略 apply 是类似索引的系列或DataFrame。指定 group_keys 是否明确包含组密钥。

squeeze布尔值,默认为False

如果可能,降低返回类型的维度,否则返回一致的类型。

1.1.0 版后已移除.

observed布尔值,默认为False

这只适用于任何一个石斑鱼是绝对的。如果为True:仅显示类别分组的观测值。如果为False:显示分类分组的所有值。

dropna布尔值,默认为True

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

1.1.0 新版功能.

退货
DataFrameGroupBy

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

参见

resample

一种方便的时间序列频率变换和重采样方法。

注意事项

请参阅 user guide 获取更详细的用法和示例,包括将对象拆分成组、遍历组、选择组、聚合等。

示例

>>> 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

我们还可以通过设置来选择是否将NA包括在组密钥中 dropna 参数,则默认设置为 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).apply(lambda x: x)
          Animal  Max Speed
Animal
Falcon 0  Falcon      380.0
       1  Falcon      370.0
Parrot 2  Parrot       24.0
       3  Parrot       26.0
>>> df.groupby("Animal", group_keys=False).apply(lambda x: x)
   Animal  Max Speed
0  Falcon      380.0
1  Falcon      370.0
2  Parrot       24.0
3  Parrot       26.0