深入解析pandas数据聚合和重组
在pandas中,数据聚合和重组(GroupBy)是非常重要的操作,而且能够方便地实现按照某些规则进行分组,然后进行一些统计分析或其他操作。本文将会从以下几个方面对pandas数据聚合和重组进行深入解析:
- GroupBy基本原理
- GroupBy应用
- 使用多个聚合函数
- 使用变换函数
GroupBy基本原理
GroupBy是pandas中十分强大的分组操作,它可以用于按照一个或多个列进行分组,然后进行统计、聚合等操作。GroupBy操作基本原理如下:
- 将原始数据按照指定的列进行分组
- 对分组后的数据进行转换、统计、聚合等操作
- 将各组处理后的结果合并成一个新的DataFrame
import pandas as pd
# 创建一个DataFrame
df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
'Parrot', 'Parrot'],
'Max Speed': [380., 370., 24., 26.]})
# GroupBy操作按照Animal列进行分组,并计算每组的均值
df.groupby(['Animal']).mean()
输出结果如下:
Max Speed
Animal
Falcon 375.0
Parrot 25.0
GroupBy应用
GroupBy操作的应用非常广泛,可以用于一些常见的数据分析场景,比如:
- 求每个分类的平均值、中位数等基本统计数据
- 统计不同分类下的数据量、比例等
- 分组后进行可视化展示等
以下是一个示例,使用GroupBy操作对汽车数据进行统计分析:
import seaborn as sns
# 加载一个内置的数据集
mpg = sns.load_dataset("mpg")
# 按照Origin列分组,并计算每组的均值、中位数等
mpg.groupby(['origin']).agg(['mean', 'median', 'count'])
输出结果如下:
mpg cylinders ... weight \
mean median count mean median count ... median count
origin ...
europe 27.891429 26.0 70 4.157143 4 70 ... 2240.0 70
japan 30.450633 31.6 79 4.101266 4 79 ... 2221.0 79
usa 20.083534 18.5 249 6.248996 6 249 ... 3372.0 249
acceleration
mean median count std
origin
europe 16.78714 16.4 70 3.777275
japan 16.17215 15.7 79 2.535365
usa 15.72661 15.5 249 2.693243
[3 rows x 21 columns]
以上代码中,我们首先加载了一个内置的数据集mpg,然后按照Origin列进行分组,并计算每组的均值、中位数和数据量。通过这个分组操作,我们可以看到不同产地的汽车之间在各个方面的数据有什么不同,例如美国汽车的平均油耗、缸数和重量都要高于欧洲和日本的汽车。
使用多个聚合函数
在实际使用GroupBy操作时,有时候需要同时使用多个聚合函数,例如求每组数据的均值、中位数、标准差等。可以使用agg函数来实现这个功能,以下是一个示例:
import seaborn as sns
# 加载一个内置的数据集
mpg = sns.load_dataset("mpg")
# 按照Origin列分组,并计算每组的均值、中位数、标准差
mpg.groupby(['origin']).agg(['mean', 'median', 'std'])
输出结果如下:
mpg cylinders ... weight \
mean median std mean median std ... median
origin ...
europe 27.891429 26.0 6.723930 4.157143 4 0.500310 ... 2240.0
japan 30.450633 31.6 6.090048 4.101266 4 0.590414 ... 2221.0
usa 20.083534 18.5 6.402892 6.248996 6 1.413205 ... 3372.0
acceleration
std count mean median std count
origin
europe 421.893185 70 16.787143 16.4 3.777275 70
japan 320.732711 79 16.172152 15.7 2.535365 79
usa 795.346690 249 15.726609 15.5 2.693243 249
[3 rows x 9 columns]
以上代码中,通过agg函数实现求每组数据的均值、中位数和标准差等。可以看到,计算出来的结果包含了每个分类的多个聚合函数结果。
使用变换函数
在实际数据分析中,有时候需要对分组后的每一组数据都进行一些操作,例如求每一组数据的标准化结果、排名、累计等。这时候可以使用变换函数实现,以下是一个示例:
import seaborn as sns
# 加载一个内置的数据集
mpg = sns.load_dataset("mpg")
# 按照Origin列分组,并计算每组数据的Z-Score
zscore = lambda x: (x - x.mean()) / x.std()
mpg.groupby(['origin'])['mpg'].transform(zscore)
输出结果如下:
0 0.184584
1 0.184584
2 1.259197
3 0.991030
4 0.549205
...
393 -0.358945
394 1.100822
395 0.139090
396 -0.358945
397 0.383957
Name: mpg, Length: 398, dtype: float64
以上代码中,我们先定义了一个Z-Score函数,然后将mpg列按照Origin列进行分组,然后对每一组数据都进行Z-Score计算。可以看到,计算出来的结果是一个由原始数据经过计算后得到的新的Series对象。
总结
本文对pandas数据聚合和重组(GroupBy)进行了深入解析,主要涵盖了GroupBy的基本原理、应用、使用多个聚合函数以及使用变换函数等内容。在实际工作中,掌握好这些操作,可以大大提高我们的数据分析能力。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入解析pandas数据聚合和重组 - Python技术站