pandas.Series.groupby#
- Series.groupby(by=None, level=None, as_index=True, sort=True, group_keys=True, observed=False, dropna=True)[源代码][源代码]#
- 使用映射器或通过一系列列来分组系列。 - groupby 操作涉及对象的拆分、函数的应用和结果的组合。这可以用于对大量数据进行分组并在这些组上进行计算。 - 参数:
- 通过映射, 函数, 标签, pd.Grouper 或此类列表
- 用于确定 groupby 的分组。如果 - by是一个函数,它会在对象索引的每个值上调用。如果传递的是字典或 Series,将使用 Series 或字典的值来确定分组(Series 的值首先对齐;见- .align()方法)。如果传递的是长度等于所选轴的列表或 ndarray(见 groupby 用户指南),这些值将按原样用于确定分组。可以传递标签或标签列表,按- self中的列进行分组。注意,元组被解释为一个(单个)键。
- 级别int, 级别名称, 或此类序列, 默认 None
- 如果轴是 MultiIndex(分层),按特定级别或多个级别分组。不要同时指定 - by和- level。
- as_index布尔值, 默认为 True
- 返回带有组标签作为索引的对象。仅与 DataFrame 输入相关。as_index=False 实际上是“SQL 风格”的分组输出。此参数对过滤(参见用户指南中的 过滤),例如 - head()、- tail()、- nth()以及转换(参见用户指南中的 转换)没有影响。
- 排序布尔值, 默认为 True
- 排序组键。通过关闭此功能可以获得更好的性能。请注意,这不会影响每个组内观察的顺序。Groupby 保留每个组内行的顺序。如果为 False,组将按照它们在原始 DataFrame 中的顺序出现。此参数对过滤(参见用户指南中的 过滤),如 - head()、- tail()、- nth()以及变换(参见用户指南中的 变换)没有影响。- 在 2.0.0 版本发生变更: 使用有序分类分组器时指定 - sort=False将不再对值进行排序。
- group_keys布尔值, 默认为 True
- 当调用 apply 并且 - by参数产生一个类似索引的(即 一个变换)结果时,将组键添加到索引以识别片段。默认情况下,当结果的索引(和列)标签与输入匹配时,组键不包括在内,否则包括在内。- 在 1.5.0 版本发生变更: 警告 - group_keys在- apply的结果是类似索引的 Series 或 DataFrame 时将不再被忽略。明确指定- group_keys以包含或不包含组键。- 在 2.0.0 版本发生变更: - group_keys现在默认为- True。
- observed布尔值, 默认为 True
- 这只适用于分组器中的任何一个为分类变量的情况。如果为True:仅显示分类分组器的观测值。如果为False:显示分类分组器的所有值。 - 在 3.0.0 版本发生变更: 默认值现在是 - True。
- dropna布尔值, 默认为 True
- 如果为真,并且如果组键包含NA值,则将删除NA值以及行/列。如果为假,NA值也将被视为组中的键。 
 
- 返回:
- pandas.api.typing.SeriesGroupBy
- 返回一个包含组信息的groupby对象。 
 
 - 参见 - resample
- 用于时间序列的频率转换和重采样的便捷方法。 
 - 备注 - 更多详细用法和示例,请参阅 用户指南 ,包括将对象分组、遍历组、选择组、聚合等。 - groupby 的实现是基于哈希的,这意味着特别是比较相等的对象将被认为是同一组。一个例外是 pandas 对 NA 值有特殊处理:任何 NA 值将被折叠到一个单独的组中,无论它们如何比较。有关更多详细信息,请参见上述链接的用户指南。 - 示例 - >>> ser = pd.Series([390., 350., 30., 20.], ... index=['Falcon', 'Falcon', 'Parrot', 'Parrot'], ... name="Max Speed") >>> ser Falcon 390.0 Falcon 350.0 Parrot 30.0 Parrot 20.0 Name: Max Speed, dtype: float64 - 我们可以传递一组值来根据自定义标签对 Series 数据进行分组: - >>> ser.groupby(["a", "b", "a", "b"]).mean() a 210.0 b 185.0 Name: Max Speed, dtype: float64 - 按数字标签分组会产生类似的结果: - >>> ser.groupby([0, 1, 0, 1]).mean() 0 210.0 1 185.0 Name: Max Speed, dtype: float64 - 我们可以按索引的一个级别进行分组: - >>> ser.groupby(level=0).mean() Falcon 370.0 Parrot 25.0 Name: Max Speed, dtype: float64 - 我们可以根据应用于 Series 值的条件进行分组: - >>> ser.groupby(ser > 100).mean() Max Speed False 25.0 True 370.0 Name: Max Speed, dtype: float64 - 按索引分组 - 我们可以使用 level 参数对分层索引的不同级别进行分组: - >>> arrays = [['Falcon', 'Falcon', 'Parrot', 'Parrot'], ... ['Captive', 'Wild', 'Captive', 'Wild']] >>> index = pd.MultiIndex.from_arrays(arrays, names=('Animal', 'Type')) >>> ser = pd.Series([390., 350., 30., 20.], index=index, name="Max Speed") >>> ser Animal Type Falcon Captive 390.0 Wild 350.0 Parrot Captive 30.0 Wild 20.0 Name: Max Speed, dtype: float64 - >>> ser.groupby(level=0).mean() Animal Falcon 370.0 Parrot 25.0 Name: Max Speed, dtype: float64 - 我们还可以按层次索引的 ‘Type’ 级别进行分组,以获取每种类型的平均速度: - >>> ser.groupby(level="Type").mean() Type Captive 210.0 Wild 185.0 Name: Max Speed, dtype: float64 - 我们还可以通过定义 dropna 参数来选择是否在组键中包含 NA,默认设置为 True。 - >>> ser = pd.Series([1, 2, 3, 3], index=["a", 'a', 'b', np.nan]) >>> ser.groupby(level=0).sum() a 3 b 3 dtype: int64 - 要在组键中包含 NA 值,请设置 dropna=False: - >>> ser.groupby(level=0, dropna=False).sum() a 3 b 3 NaN 3 dtype: int64 - 我们还可以通过包含NaN值的自定义列表进行分组,以处理缺失的组标签: - >>> arrays = ['Falcon', 'Falcon', 'Parrot', 'Parrot'] >>> ser = pd.Series([390., 350., 30., 20.], index=arrays, name="Max Speed") >>> ser.groupby(["a", "b", "a", np.nan]).mean() a 210.0 b 350.0 Name: Max Speed, dtype: float64 - >>> ser.groupby(["a", "b", "a", np.nan], dropna=False).mean() a 210.0 b 350.0 NaN 20.0 Name: Max Speed, dtype: float64