利用python进行数据分析10.1
第十章 分组聚合与分组操作
10.1 GroupBy机制
分组键的形式:
- 与要分组的轴向上元素数量一致的值列表或值数组作为分组键;
- DF的列名作为分组键;
- 使用字典或者Series作为分组键;
- 函数作为分组键。
-
假设你想要使用key1标签计算data1列的均值,可以使用groupby方法:
grouped=df['data1'].groupby(df['key1']) grouped.mean() -
使用多个数组作为分组键:
means=df['data1'].groupby([df['key1'],df['key2']]).mean() means
由于我们使用了两个键对数据进行了分组,所以在结果Series中,会出现一个包含唯一键对的多层索引。!
-
使用与data1长度相同的Series作为分组键:
states=np.array(['Ohio','California','California','Ohio','Ohio']) years=np.array([2005,2005,2006,2005,2006]) df['data1'].groupby([states,years]).mean()
-
使用列名作为分组键:
df.groupby('key1').mean()
分组键在DF中,key2这一列的数据类型非数值类型,所以在groupby中会默认被排除。
df.groupby(['key1','key2']).mean()
- groupby的通用方法是size,size会返回一个包含数组大小信息的Serise。
10.1.1 遍历各个分组
-
groupby对象支持迭代:
for name,group in df.groupby('key1'): print(name) print(group)
name是key1中的 a 和 b。
-
使用多键作为分组键,如何遍历各个分组:
for (k1,k2), group in df.groupby(['key1','key2']): print((k1,k2) print(group)(k1,k2)是根据['key1','key2']分组后的组别名称,分别有(a,one),(a,two),(b,one),(b,two)四个
-
将groupby对象转换为字典对象更便于我们使用:
pieces=dict(list(df.groupby('key1'))) pieces['b'] //进行字典操作
-
默认情况下,groupby在axis=0(y轴)上分组。
-
可以使用axis=1或axis=0自定义按哪个轴进行分组。
10.1.2 选择一列或者是所有列的子集
-
如果索引操作进行数据处理时,传递的是列表(比如[['data1']])或者是数组,则索引操作返回的对象是分组的DataFrame:
df['data1'].groupby(df['key1']).mean() //output是Series类型
-
如果只有列名作为标量传递,则为分组的Serise:
df[['data1']].groupby(df['key1']).mean() //output是DataFrame类型
10.1.3 使用字典和Series分组
-
使用字典作为分组键:
mapping={'a':'red','b':'red','c':'blue','d':'blue','e':'red','f':'orange'} by_column=people.groupby(mapping,axis=1)
-
使用Series作为分组键:
map_series=pd.Series(mapping) perple.groupby(map_series,axis=1).count()对people的X轴(axis=1)进行分组,分组键是map_series。
10.1.4 使用函数进行分组
-
使用len()函数作为分组键进行分组:
people.groupby(len).sum()未指定根据哪个轴进行分组时,默认选择Y轴(0轴),同时根据index的长度进行分组。
-
使用函数与数组、字典或Serise组成联合分组键进行分组:
key_list=['one','one','one',two','two'] people.groupby([len,key_list]).min()
要注意的是,列表key_list 中的元素要保证和len()函数接收到的参数一致(即people的index个数一致)。
10.1.5 根据索引层级分组
根据索引分组时,将层级数值或层级名称传递给level关键字:
hire_df.groupby(level='cty',axis=1).count()

浙公网安备 33010602011771号