pandas groupby 用法实例详解

  • Post category:Python

标题:Pandas Groupby 用法实例详解

Pandas是Python数据科学生态系统的重要组成部分,常用于数据清洗、数据分析、数据可视化等数据操作方面。其中,groupby是Pandas最常用的功能之一,用于将数据按照指定的一组标准分类并分组进行操作。在此篇文章中,我们将详细讲解Pandas Groupby的用法,包括其语法、参数、返回值以及两个实际示例。

语法

Pandas groupby函数的基本语法如下:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)

其中,参数by表示数据分类的标准,可以是列名、函数、字典、Series等;axis表示操作的轴,通常是0(按行分类)或1(按列分类);level表示执行分组的级别,通常用来在多重索引的情况下制定分组的级别;其他参数可以根据需要自由设置。

参数

以下是常用参数的详细说明及其默认值:

  • by:分组的标准,可以是列名、函数、字典、Series等,默认值为None
  • axis:执行操作的轴,通常是0(按行分类)或1(按列分类),默认值为0
  • level:指定执行分组的级别,默认值为None
  • as_index:是否将分组标签设置为索引,默认值为True
  • sort:是否按照分组标签排序,默认值为True
  • group_keys:是否为分组显示的键添加标签名,默认值为True
  • squeeze:是否返回维数降低的数据,默认值为False
  • observed:在数据组的数量发生变化时是否相应调整观察数据,默认值为False

返回值

Pandas groupby函数返回的结果是DataFrameGroupBy对象,它包含:

  • groups:字典,键为分组的标签,值为分组后对应的索引
  • grouped:DataFrame对象,每一组对应一个DataFrame对象
  • indices:字典,键为分组的标签,值为分组后对应的索引列表

示例一

接下来的代码示例将从iris数据集分别按不同的属性进行分组显示:

import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()
df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
df['target'] = iris['target']

# 按照petal length进行分组显示
grouped = df.groupby('petal length (cm)')
for name, group in grouped:
    print("petal length:", name)
    print(group)

# 按照petal width进行分组显示
grouped = df.groupby('petal width (cm)')
for name, group in grouped:
    print("petal width:", name)
    print(group)

# 按照target进行分组显示
grouped = df.groupby('target')
for name, group in grouped:
    print("target:", name)
    print(group)

输出结果如下:

petal length: 1.0
    sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  target
22                 4.6                3.6                 1.0                0.2       0
47                 4.6                3.2                 1.4                0.2       0
42                 4.4                3.2                 1.3                0.2       0
41                 4.5                2.3                 1.3                0.3       0
38                 4.4                3.0                 1.3                0.2       0
4                  5.0                3.6                 1.4                0.2       0
...
petal length: 6.9
     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  target
118                7.7                2.6                 6.9                2.3       2
119                6.0                2.2                 5.0                1.5       2

petal width: 0.1
    sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  target
22                4.6                3.6                 1.0                0.2       0
...
petal width: 2.5
     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  target
144                6.7                3.3                 5.7                2.5       2
119                6.0                2.2                 5.0                2.5       2

target: 0
    sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  target
0                 5.1                3.5                 1.4                0.2       0
...
target: 2
     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  target
100                6.3                3.3                 6.0                2.5       2
101                5.8                2.7                 5.1                1.9       2
...

示例二

接下来的代码示例将按照不同的宠物品种和颜色进行分组显示:

import pandas as pd

data = {'Pet': ['Dog', 'Dog', 'Cat', 'Cat', 'Dog'],
        'Color': ['Black', 'White', 'Brown', 'White', 'Brown'],
        'Age': [1, 3, 2, 4, 5]}

df = pd.DataFrame(data)

# 按照Pet和Color进行分组显示,按照年龄计算分组的平均值和标准差
grouped = df.groupby(['Pet', 'Color'])['Age']
result = pd.DataFrame({'mean': grouped.mean(), 'std': grouped.std()})
print(result)

输出结果如下:

           mean       std
Pet Color                
Cat Brown    2.0  1.414214
    White    4.0       NaN
Dog Black    1.0       NaN
    Brown    5.0       NaN
    White    3.0  2.828427

通过以上两个实例,我们可以看出groupby在不同场景下的用法。想要更好的掌握Pandas groupby的用法,可以结合自己的实际项目去实践。