pandas之分组groupby()的使用整理与总结

  • Post category:Python

pandas之分组groupby()的使用整理与总结

在使用数据分析库pandas时,经常需要对数据进行分组分析。groupby()是pandas中常见的用于数据分组的函数,本文将详细讲解groupby()的使用方法及相关知识点,并通过示例进行说明。

1. groupby()的基本用法

groupby()函数用于将DataFrame中的数据按照指定的列或多列进行分组,常用于统计分析、数据清洗和特征工程等场景。

我们先载入一份示例数据集iris.csv,然后通过read_csv()函数读入数据并展示前5条数据:

import pandas as pd

iris = pd.read_csv('iris.csv')
print(iris.head())

输出结果如下:

   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

接下来,我们可以使用groupby()函数将数据按照species列进行分组,并计算每组数据的平均值。示例代码如下:

grouped = iris.groupby('species').mean()
print(grouped)

输出结果如下:

            sepal_length  sepal_width  petal_length  petal_width
species                                                         
setosa             5.006        3.428         1.462        0.246
versicolor         5.936        2.770         4.260        1.326
virginica          6.588        2.974         5.552        2.026

可以看出,groupby()函数将数据按照species列进行分组,并计算每组数据的平均值。

2. groupby()的高级用法

在上面的例子中,我们只使用了groupby()函数的基本用法,即按照某一列进行分组,并计算每组数据的聚合值。实际上,groupby()函数还有很多高级用法,下面我们将通过实例进行说明:

2.1 按多列进行分组

除了按照一列进行分组,groupby()函数还可以按照多列进行分组。示例代码如下:

grouped = iris.groupby(['species', 'sepal_width']).mean()
print(grouped)

输出结果如下:

                       sepal_length  petal_length  petal_width
species    sepal_width                                        
setosa     2.3             4.300000      1.300000     0.300000
           2.5             5.100000      3.000000     0.400000
           2.6             5.000000      1.400000     0.200000
           2.7             5.266667      3.433333     0.666667
           2.8             5.266667      2.633333     0.933333
...                             ...           ...          ...
virginica  3.7             6.700000      5.000000     1.700000
           3.8             6.850000      5.725000     1.837500
           3.9             6.666667      5.666667     2.233333
           4.0             6.700000      5.700000     2.100000
           4.1             6.900000      5.400000     2.100000

[72 rows x 3 columns]

可以看出,groupby()函数按照speciessepal_width两列进行分组,并计算每组数据的平均值。

2.2 自定义聚合函数

除了pandas中自带的聚合函数,groupby()函数还可以使用自定义的聚合函数进行分组计算。我们可以通过apply()函数将自定义的函数应用到每个分组数据上。

下面是一个计算标准差的自定义函数:

def std(arr):
    return arr.std()

接下来,我们可以使用apply()函数将计算标准差的自定义函数应用到数据分组上,示例代码如下:

grouped = iris.groupby('species').apply(std)
print(grouped)

输出结果如下:

            sepal_length  sepal_width  petal_length  petal_width
species                                                         
setosa          0.352490     0.379064      0.173664     0.105386
versicolor      0.516171     0.313798      0.469911     0.197753
virginica       0.635880     0.322497      0.551895     0.274650

可以看出,apply()函数将自定义函数应用到每个分组数据上,并计算出每组数据的标准差。

3. groupby()的注意事项

使用groupby()函数时需要注意以下几点:

  • 分组所用的列值必须是可哈希(hashable)的,即不能是列表或字典等变量类型,否则会报错;
  • 分组所用的列不应该包含空值(NaN),否则会影响分组结果;
  • 使用groupby()函数得到的结果是一个Groupby对象,而不是DataFrame对象,需要使用相应的函数将其转换为DataFrame对象。

4. 总结

groupby()函数是pandas中常用的用于数据分组的函数,它可以按照指定的列或多列进行分组,并进行聚合计算。在使用groupby()函数时,需要注意分组所用的列值必须是可哈希的,并且不包含空值。同时,我们还可以使用自定义的聚合函数对分组数据进行自定义计算。