python我爱编程

西儿马 | pandas的groupby问题

2016-05-11  本文已影响688人  西儿马

学习pandas时,对groupby的用法有点疑惑。
以下是一下DataFrame示例:

In [1]: df
Out [2]:
        data1   data2    key1   key2
0   0.233689    0.139407    a   one
1   0.491570    0.366669    a   two
2   0.453069    0.872943    b   one
3   0.935608    0.161360    b   two
4   0.364860    0.182786    a   one
  1. 按key1进行分组
In [3]: grouped1 = df.groupby(df['key1'])
In [4]: grouped1.mean()
Out [4]:
        data1       data2
key1        
a   0.363373    0.229621
b   0.694339    0.517151

因为groupby本身没有计算成果,所以我们调用mean来看结果。

  1. 按自定义列表进行分组
In [5]: grouped2 = df.groupby(['1', '1', '2', '2', '1'])
In [6]: grouped2.mean()
Out [6]:
        data1       data2   
1   0.363373    0.229621
2   0.694339    0.517151

为什么grouped1和grouped2是相等的呢?我觉得可以这样来理解:在进行分组时,是根据分组列表的元素对被分组的DataFrame进行分组,也就是说,无论是['a', 'a', 'b', 'b', 'a'],还是['1', '1', '2', '2', '1'],都是把第1、2、和5行分为一组,把第3行和第4行分为一组,所以,如果再来一个grouped3 = df.groupby(['3', '3', 'F', 'F', '3']),其分组结果仍然是一样的。
但是如果把分组列表换成['a', 'a', 'a', 'b', 'c']呢?又会现什么样的结果?

In [7]: grouped4 = df.groupby(['a', 'a', 'a', 'b', 'c'])
In [8]: grouped4.mean()
Out [8]: 
     data1     data2
a   0.392776    0.459673
b   0.935608    0.161360
c   0.364860    0.182786
上一篇 下一篇

猜你喜欢

热点阅读