文章目录
1. 分组与聚合的原理
在Pandas中:
分组
是指使用特定的条件
将原数据划分
为多个组
。
聚合
在这里指的是,对每个分组中的数据执行某些操作,最后将计算的结果进行整合。
Pandas分组方式-官方参考文档地址
分组与聚合的过程大概分为以下三步
:
分组与聚合的原理
:
2. 通过groupby()方法将数据划分成组
groupby(by=None, axis=0, level=None, as_index=True, sort=True,group_keys=True, squeeze=False, observed=False, **kwargs)
by
:用于确定进行分组的依据。axis
:表示分组轴的方向。sort
:表示是否对分组标签进行排序,接收布尔值,默认为True
。
- 使用Series调用
groupby()
方法返回的是SeriesGroupBy对象。 - 使用DataFrame调用
groupby()
方法返回的是DataFrameBy对象。
列表或数组 | DataFrame某列 | 字典或Series对象 | 函数 |
---|
2.1 按列名进行分组
df.groupby(by='Key')
#<DataFrameGroupBy object at 0x0000000006E274A8>
group_obj = df.groupby('Key')
# 遍历分组对象
for i in group_obj:
print(i)
2.2 按Series对象进行分组
ser_obj = pd.Series(['a', 'b', 'c', 'a', 'b'])
# 按自定义Series对象进行分组
group_obj = df.groupby(by = ser_obj)
思考:
答:
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)
2.3 按字典进行分组
mapping = {'a':'第一组','b':'第二组','c':'第一组','d':'第三组','e':'第二组'}
by_column = num_df.groupby(mapping, axis=1)
2.4 按函数进行分组
# 使用内置函数len进行分组
groupby_obj = df.groupby(len)
3. 数据聚合
3.1 使用内置统计方法聚合数据
# 按key1进行分组,求每个分组的平均值
df.groupby('key1').mean()
3.2 面向列的聚合方法
agg(func,axis = 0,* args,** kwargs )
func
:表示用于汇总数据的函数,可以为单个函数或函数列表。axis
:表示函数作用于轴的方向,0
或index
表示将函数应用到每一列;columns
表示将函数应用到每一行,该参数的默认值为0
。
3.3 对每一列数据应用同一个函数
def range_data_group(arr):
return arr.max()-arr.min()
# 使用自定义函数聚合分组数据
data_group.agg(range_data_group)
3.4 对某列数据应用不同的函数
# 对一列数据用两种函数聚合
data_group.agg([range_data_group, sum])
data_group.agg([("极差", range_data_group), ("和", sum)])
3.5 对不同列数据应用不同函数
data_group.agg({'a': 'sum', 'b': 'mean', 'c': range_data_group})
4. 分组级运算
4.1 数据转换
思考:
答:
transform(func, *args, **kwargs)
- 上述方法中只有一个
func
参数,表示操作Pandas对象的函数。 transfrom()
方法会把func
函数应用到各个分组中,并且将计算结果放在适当的位置上。
4.2 数据应用
apply(func, axis=0, broadcast=None, raw=False, reduce=None,result_type=None, args=(), **kwds)
func
:表示应用于某一行或某一列的函数。axis
:表示函数操作的轴向。broadcast
:表示是否将数据进行广播。
5. 总结
主要针对Pandas的分组聚合和其它组内运算进行了介绍,包括分组与聚合的原理、分组操作、聚合操作,以及其它分组级的相关操作,最后介绍了一个分析运动员基本信息的案例,真实地演示如何运用这些知识。