dask_expr._collection.DataFrame.groupby
dask_expr._collection.DataFrame.groupby¶
- DataFrame.groupby(by, group_keys=True, sort=None, observed=None, dropna=None, **kwargs)[源代码]¶
使用映射器或按列的Series对DataFrame进行分组。
此文档字符串是从 pandas.core.frame.DataFrame.groupby 复制而来的。
Dask 版本可能存在一些不一致性。
groupby 操作涉及对象的拆分、应用函数以及结果的合并。这可以用于对大量数据进行分组并在这些组上进行计算操作。
- 参数
- 通过映射, 函数, 标签, pd.Grouper 或此类列表
用于确定分组的组别。如果
by
是一个函数,它会在对象索引的每个值上调用。如果传递的是字典或 Series,将使用 Series 或字典的值来确定组别(Series 的值首先对齐;参见.align()
方法)。如果传递的是与所选轴长度相等的列表或 ndarray(参见 groupby 用户指南),这些值将按原样用于确定组别。可以传递标签或标签列表,按self
中的列进行分组。注意,元组被解释为(单个)键。- 轴{0 或 ‘index’, 1 或 ‘columns’}, 默认 0 (在 Dask 中不支持)
沿行(0)或列(1)分割。对于 Series,此参数未使用,默认值为 0。
2.1.0 版后已移除: 将在未来版本中移除,并表现得像 axis=0。对于
axis=1
,请改为使用frame.T.groupby(...)
。- 级别int, 级别名称, 或此类序列, 默认 None (Dask 中不支持)
如果轴是 MultiIndex(分层),则按特定级别或多个级别进行分组。不要同时指定
by
和level
。- as_indexbool, 默认 True (Dask 不支持)
返回带有组标签作为索引的对象。仅与 DataFrame 输入相关。as_index=False 实际上是“SQL 风格”的分组输出。此参数对过滤(参见用户指南中的 过滤),如
head()
、tail()
、nth()
以及转换(参见用户指南中的 转换)没有影响。- 排序bool, 默认 True
排序组键。通过关闭此选项可以获得更好的性能。请注意,这不会影响每个组内观测值的顺序。Groupby 保留每个组内行的顺序。如果为 False,组将按照它们在原始 DataFrame 中的顺序出现。此参数对过滤(参见用户指南中的 过滤),如
head()
、tail()
、nth()
以及变换(参见用户指南中的 变换)没有影响。在 2.0.0 版更改: 使用有序分类分组器时指定
sort=False
将不再对值进行排序。- group_keysbool, 默认 True
当调用 apply 并且
by
参数产生一个类似索引的结果(即 一个变换)时,将组键添加到索引中以识别片段。默认情况下,当结果的索引(和列)标签与输入匹配时,组键不包括在内,否则包括在内。在 1.5.0 版更改: 警告:当
apply
的结果是类似索引的 Series 或 DataFrame 时,group_keys
将不再被忽略。请明确指定group_keys
以包含或不包含组键。在 2.0.0 版更改:
group_keys
现在默认设置为True
。- 观察到的bool, 默认 False
这仅适用于分组器中的任何一个为分类变量的情况。如果为True:仅显示分类分组器的观测值。如果为False:显示分类分组器的所有值。
2.1.0 版后已移除: 在未来的pandas版本中,默认值将更改为True。
- dropnabool, 默认 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