📜  pandas gropu by - Python (1)

📅  最后修改于: 2023-12-03 14:45:02.572000             🧑  作者: Mango

Pandas groupby - Python

Pandas是一个流行的Python数据分析库,它提供了数据操作和分析的丰富功能。其中一个关键功能就是groupby操作。

groupby操作是将一组数据按照一个或多个特定的键进行拆分,并将相同键的数据分为一组。之后,可以对每个组分别应用特定的操作。

下面将介绍如何使用groupby来进行数据分析。

数据准备

为了演示Pandas的groupby操作,我们需要准备一些数据。我们将使用鸢尾花数据集,该数据集包含了150个观测值和4个特征。

首先,我们需要导入Pandas库和数据集:

import pandas as pd
from sklearn.datasets import load_iris

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

接下来,我们将查看数据集的前5行:

print(df.head())

结果应该如下所示:

   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  target
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函数,我们可以将数据按照指定的列进行分组:

grouped = df.groupby(by='target')

上述代码将以target列进行分组,并返回一个DataFrameGroupBy对象。一旦我们有了这个对象,我们就可以对每个组应用相应的转换或运算符。

以下是如何计算每个组的平均值:

print(grouped.mean())

输出结果应该如下所示:

            sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
target                                                                            
setosa                  5.006             3.418              1.464             0.244
versicolor              5.936             2.770              4.260             1.326
virginica               6.588             2.974              5.552             2.026

我们可以看到,每种目标分类下每个特征的平均值都被计算了出来。

高级选项

groupby函数还有许多高级选项,例如针对多个键进行分组,对每个组应用不同的运算符,过滤掉某些组等。这里只讨论其中的一些:

按多个键进行分组
grouped = df.groupby(by=['target', 'sepal length (cm)'])
print(grouped.mean())

上述代码将按target列和sepal length (cm)列进行分组,并返回平均值。

对每个组应用不同的函数

Pandas许多内置的函数(例如mean、sum、min和max)可以直接应用于DataFrameGroupBy对象。但是,您可能需要使用自己定义的函数进行运算,这时就需要使用apply函数。

以下是如何在每个组中计算前三个最大值的例子:

grouped = df.groupby(by='target')

def top3(df):
    return df.nlargest(3, columns=['sepal length (cm)'])

result = grouped.apply(top3)
print(result)

上述代码将每个组的前三个最大值提取出来,并返回一个新的DataFrame对象。

过滤掉某些组

有时候我们需要过滤掉某些组,只分析符合特定条件的数据。Pandas提供了filter函数来解决这个问题。

以下是如何筛选出每个组的标准差大于0.5的例子:

grouped = df.groupby(by='target')

def std_filter(df):
    return df['sepal length (cm)'].std() > 0.5

result = grouped.filter(std_filter)
print(result)

上述代码将标准差小于0.5的数据过滤掉,并返回一个新的DataFrame对象。

总结

在本文中,我们介绍了如何使用Pandas的groupby函数进行数据分析。无论您是在做探索性数据分析,还是在进行数据清洗和准备,groupby函数都是必不可少的工具。希望这篇文章能够帮助您更好地理解和应用该函数。