利用python进行数据分析10.1

第十章 分组聚合与分组操作

10.1 GroupBy机制

分组键的形式

  1. 与要分组的轴向上元素数量一致的值列表或值数组作为分组键;
  2. DF的列名作为分组键;
  3. 使用字典或者Series作为分组键;
  4. 函数作为分组键。

1677752520824.png

  1. 假设你想要使用key1标签计算data1列的均值,可以使用groupby方法:

    grouped=df['data1'].groupby(df['key1'])
    grouped.mean()
    
  2. 使用多个数组作为分组键:

    means=df['data1'].groupby([df['key1'],df['key2']]).mean()
    means
    

1677752611295.png ​ 由于我们使用了两个键对数据进行了分组,所以在结果Series中,会出现一个包含唯一键对的多层索引。!

1677751890508.png

  1. 使用与data1长度相同的Series作为分组键:

    states=np.array(['Ohio','California','California','Ohio','Ohio'])
    years=np.array([2005,2005,2006,2005,2006])
    df['data1'].groupby([states,years]).mean()
    

1677752226168.png

  1. 使用列名作为分组键:

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

1677752671022.png

分组键在DF中,key2这一列的数据类型非数值类型,所以在groupby中会默认被排除。

df.groupby(['key1','key2']).mean()

1677752760441.png

  1. groupby的通用方法是size,size会返回一个包含数组大小信息的Serise。

10.1.1 遍历各个分组

  1. groupby对象支持迭代:

    for name,group in df.groupby('key1'):
    	print(name)
        print(group)
    

1677753245713.png

​ name是key1中的 a 和 b。

  1. 使用多键作为分组键,如何遍历各个分组:

    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)四个

  2. 将groupby对象转换为字典对象更便于我们使用:

    pieces=dict(list(df.groupby('key1')))
    pieces['b'] //进行字典操作
    

1677760371478.png

  1. 默认情况下,groupby在axis=0(y轴)上分组。

  2. 可以使用axis=1或axis=0自定义按哪个轴进行分组。

10.1.2 选择一列或者是所有列的子集

  1. 如果索引操作进行数据处理时,传递的是列表(比如[['data1']])或者是数组,则索引操作返回的对象是分组的DataFrame:

    df['data1'].groupby(df['key1']).mean() //output是Series类型               
    

1677761660170.png

  1. 如果只有列名作为标量传递,则为分组的Serise:

    df[['data1']].groupby(df['key1']).mean() //output是DataFrame类型   
    

1677761640980.png

10.1.3 使用字典和Series分组

  1. 使用字典作为分组键:

    mapping={'a':'red','b':'red','c':'blue','d':'blue','e':'red','f':'orange'}
    by_column=people.groupby(mapping,axis=1)
    

1677761895814.png

  1. 使用Series作为分组键:

    map_series=pd.Series(mapping)
    perple.groupby(map_series,axis=1).count()
    

    对people的X轴(axis=1)进行分组,分组键是map_series。

10.1.4 使用函数进行分组

  1. 使用len()函数作为分组键进行分组:

    people.groupby(len).sum()
    

    未指定根据哪个轴进行分组时,默认选择Y轴(0轴),同时根据index的长度进行分组。

  2. 使用函数与数组、字典或Serise组成联合分组键进行分组:

    key_list=['one','one','one',two','two']
    people.groupby([len,key_list]).min()
    

1677762419859.png 要注意的是,列表key_list 中的元素要保证和len()函数接收到的参数一致(即people的index个数一致)。

10.1.5 根据索引层级分组

1677762678188.png 根据索引分组时,将层级数值或层级名称传递给level关键字:

hire_df.groupby(level='cty',axis=1).count()

1677762687111.png

posted @ 2023-03-02 21:26  wuhaoliu  阅读(11)  评论(0)    收藏  举报  来源