栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数据聚合与分组运算

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据聚合与分组运算

一、分组与聚合的原理

在Pandas中,分组是指使用特定的条件将原数据划分为多个组,聚合在这里指的是,对每个分组中的数据执行某些操作,最后将计算的结果进行整合。

分组与聚合的过程大概分为以下三步:

拆分

将数据集按照一些标准拆分为若干个组。

应用

将某个函数或方法(内置和自定义均可)应用到每个分组。

合并

将产生的新值整合到结果对象中。

二、通过groupby()方法将数据拆分成组

在Pandas中,可以通过groupby()方法将数据集按照某些标准划分成若干个组。

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

 groupby()方法会返回一个GroupBy对象,该对象实际上并没有进行任何计算,只是包含一些关于分组键的中间数据而已。

通过groupby()方法的by参数可以指定按什么标准分组,该参数可以接收的数据主要有以下4种:

1.列表或数组

2.dateframe某列

3. 字典或series对象

4.函数

三、按列名分组

如果DataFrame对象的某一列数据符合划分成组的标准,则可以将该列当做分组键来拆分数据集。

df.groupby(by='Key')

 如果要查看每个分组的具体内容,则可以使用for循环遍历DataFrameGroupBy对象。

group_obj = df.groupby('Key')

# 遍历分组对象

for i in group_obj:

              print(i)

 •按Series对象进行分组

还可以将自定义的Series类对象作为分组键进行分组。

ser_obj = pd.Series(['a', 'b', 'c', 'a', 'b'])

# 按自定义Series对象进行分组

group_obj = df.groupby(by = ser_obj)

 如果Series对象与Pandas对象的索引长度不相同时,则只会将具有相同索引的部分数据进行分组。

df = se = pd.Series(['a', 'a', 'b'])

group_obj = df.groupby(se)['one', 'two', 'one','two', 'one'],

                                  'data1': [2, 3, 4, 6, 8],

                                  'data2': [3, 5, 6, 3, 7]})

se = pd.Series(['a', 'a', 'b'])

group_obj = df.groupby(se)

四、按字典进行分组

 当使用字典对DataFrame进行分组时,则需要确定轴的方向及字典中的映射关系,即字典中的键为列名,字典的值为自定义的分组名。

mapping = {'a':'第一组','b':'第二组','c':'第一组','d':'第三组','e':'第二组'}

by_column = num_df.groupby(mapping, axis=1)

五、按函数进行分组

 将函数作为分组键会更加灵活,任何一个被当做分组键的函数都会在各个索引值上被调用一次,返回的值会被用作分组名称。

# 使用内置函数len进行分组

groupby_obj = df.groupby(len)

六、 使用内置统计方法聚合数据

前面介绍过的Pandas统计方法,比如用于获取最大值和最小值的max()和mix(),这些方法常用于简单地聚合分组中的数据。Series对

# 按key1进行分组,求每个分组的平均值

df.groupby('key1').mean()

 如果内置方法无法满足聚合要求时,则可以自定义函数,将它作为参数传给agg()方法,实现Pandas对象的聚合运算。象 字典或

agg(func,axis = 0,* args,** kwargs )

 七、面向列的聚合方法

 对每一列数据应用同一个函数字典

通过agg()方法进行聚合,最简单的方式就是给该方法的func参数传入一个函数,这个函数既可以是内置的,也可以自定义的或

def range_data_group(arr):

      return arr.max()-arr.min()

# 使用自定义函数聚合分组数据

data_group.agg(range_data_group) 

•对某列数据应用不同的函数

 可以将两个函数的名称放在列表中,之后在调用agg()方法进行聚合时作为参数传入即可,

# 对一列数据用两种函数聚合

data_group.agg([range_data_group, sum])

 •对不同列数据应用不同函数

如果希望对不同的列使用不同的函数,则可以在agg()方法中传入一个{"列名":"函数名"}格式的字典。

data_group.agg({'a': 'sum', 'b': 'mean', 'c': range_data_group})

 

Series对象

字典或

Series对象

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/892626.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号