学习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
- 按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来看结果。
- 按自定义列表进行分组
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