2024年07月19日
groupby分组技术是python常用方法之一,具体的分组方法主要包括:对分组进行迭代、选取一个或一组列、通过字典或Series 进行分组、通过函数进行分组以及根据索引级别分组等。
在过往对中,我们对分组进行迭代、选择去一个或一组列以及通过字典或Series 进行分组进行列分享,具体文章如下:
“拆分-应用-合并"分组运算过程,python分组技术groupby应用详解
“拆分-应用-合并"分组运算,python分组技术groupby应用详解2
“拆分-应用-合并"分组运算,python分组技术groupby应用详解3
接下来,小编对通过函数进行分组和根据索引级别分组进行详细介绍,具体如下:
相较于字典或Seires,Python函数在定义分组映射关系时可以更有创意且更为抽象。任何被当做分组键的函数都会在各个索引值上被调用一次,其返回值就会被用作分组名称。
举例:根据人名的长度进行分组,虽然可以求取一个字符串长度数组,但其实仅仅传入len函数就可以了:
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: from pandas import Series,DataFrame
In [4]: people=DataFrame(np.random.randn(5,5),columns=['a','b','c','d','e'],
index=['Joe','Steve','Wes','Jim','Travis'])
In [5]: people.groupby(len).sum()
Out[5]:
a b c d e
3 -3.152645 2.243932 0.919162 2.548441 1.566587
5 -0.064130 -2.322453 1.561030 -2.503621 2.023593
6 -0.215965 -0.934142 0.994929 1.406651 0.015119
将函数跟数组、列表、字典、Series混合使用也不是问题,因为任何东西最终都会转换为数组:
In [6]: key_list=['one','one','one','two','two']
In [7]: people.groupby([len,key_list]).min()
Out[7]:
a b c d e
3 one -2.354664 0.150884 0.921764 0.258471 -0.272082
two -0.468694 0.408352 -1.083457 0.488402 1.314167
5 one -0.064130 -2.322453 1.561030 -2.503621 2.023593
6 two -0.215965 -0.934142 0.994929 1.406651 0.015119
层次化索引数据集最方便的地方就在于它能够根据索引级别进行聚合。要实现该目的,通过level关键字传入级别编号或名称即可:
In [12]: hier_df.groupby(level='cty',axis=1).count()
Out[12]:
cty JP US
0 2 3
1 2 3
2 2 3
3 2 3
上述内容详细介绍列通过函数进行分组和根据索引级别分组的技术。到目前位置,关于groupby技术知识介绍相对完整,感兴趣的可以完整查阅一遍,收藏和关注!