利用python进行数据分析-数据聚合与分组运算1

分组键可以有多种形式,且类型不必相同a.列表或数组,且长度与待分组的轴一样b.表示DataFrame某个列的值c.字典或Series,给出待分组轴上的值与分组名之间的对应关系d.函数,用于处理轴索引或索引中的各个标签df=DataFrame({'key1':['a','a','b','b','a'],              'key2':['one','two','
摘要由CSDN通过智能技术生成

分组键可以有多种形式,且类型不必相同

a.列表或数组,且长度与待分组的轴一样

b.表示DataFrame某个列的值

c.字典或Series,给出待分组轴上的值与分组名之间的对应关系

d.函数,用于处理轴索引或索引中的各个标签

df=DataFrame({'key1':['a','a','b','b','a'],
              'key2':['one','two','one','two','one'],
              'data1':np.random.randn(5),
              'data2':np.random.randn(5)})
print df

结果为:

      data1     data2 key1 key2
0 -0.313764 -1.072629    a  one
1 -0.528144  1.189622    a  two
2  0.774314  0.489076    b  one
3 -0.472739 -0.222977    b  two
4  0.869980  2.184111    a  one

假设想按key1进行分组,并计算data1列的平均值。

grouped=df['data1'].groupby(df['key1'])

print grouped.mean()

结果为:

key1
a    0.009357
b    0.150788
Name: data1, dtype: float64

数据(Series)根据分组键进行了聚合,产生了一个新的Series,其索引为key1列中的唯一值。

如果我们一次传入多个数组,就会得到不同的结果

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

结果为:

key1  key2
a     one     0.210008
      two    -0.235437
b     one     1.218374
      two    -1.650944
Name: data1, dtype: float64

print means.unstack()

结果为:

key2       one       two
key1                    
a    -0.999244 -0.196333
b    -1.373276 -0.193712

在上面的示例中,分组键均为Series。实际上,分组键可以是任何长度适当的数组

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

结果为:

California  2005   -1.483611
            2006    1.493843
Ohio        2005    0.098908
            2006    0.197631
Name: data1, dtype: float64

此外,还可以将列名用作分组键

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

结果为:

         data1     data2
key1                    
a    -0.193688 -0.548340
b    -0.877449 -0.038743
              data1     data2
key1 key2                    
a    one   0.180915 -0.584049
     two  -0.942894 -0.476924
b    one  -0.431921 -0.396192
     two  -1.322977  0.318706

无论你准备拿groupby做什么,都有可能会用到GroupBy的size方法,它可以返回一个包含分组大小的Series

print df.groupby([df['key1'],df['key2']]).size()

结果为:

key1  key2
a     one     2
      two     1
b     one     1
      two     1
dtype: int64


1.对分组进行迭代

GroupBy对象支持迭代,可以产生一组二元元组(由分组名和数据块组成)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值