pandas.DataFrame.groupby() 函数是 Pandas 中非常强大的一个方法,可以根据一个或多个键将 DataFrame 分组,然后对每个组进行各种操作,比如聚合、转换、过滤等。这在数据分析中非常常见,比如计算分组的平均值、求和、计数等。本文主要介绍一下Pandas中pandas.DataFrame.groupby方法的使用。

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是函数,

则在对象索引的每个值上调用它。

如果通过了dictSeries

则将使用Series或dict VALUES来确定组

(将Series的值首先对齐;请参见.align()方法)。

如果传递了ndarray,则按原样使用这些值来确定组。

标签或标签列表可以按中的列传递给分组self。

注意,元组被解释为(单个)key。

axis : {0'index'1'columns'},默认0

沿rows (0)columns (1)拆分。

level : int,level名称或此类的序列,默认为None

如果axis是MultiIndex(分层),

则按一个或多个特定级别分组。

as_index : bool,默认为True

对于聚合输出,返回带有组标签的对象作为索引。

仅与DataFrame输入有关。

as_index = False实际上是“ SQL风格”的分组输出。

sort : 布尔值,默认为True

排序组键。关闭此功能可获得更好的性能。请注意,

这不会影响每个组中观察的顺序。

Groupby保留每个组中行的顺序。

group_keys : 布尔值,默认为True

调用apply时,将组键添加到索引以识别片段。

squeeze : 布尔值,默认为False

如果可能,请减小返回类型的维数,

否则返回一致的类型。

observed : 布尔值,默认为False

仅当任何groupers为分类者时才适用。如果为True

仅显示分类groupers的观测值。

如果为False:显示分类groupers的所有值。

0.23.0版中的新功能。

**kwargs

可选,仅接受关键字参数"mutated"并传递给groupby

返回值

DataFrameGroupBySeriesGroupBy

依赖于调用对象,

并返回包含有关组信息的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)

推荐文档

相关文档

大家感兴趣的内容

随机列表