版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/jingshuiliushen_zj/article/details/83211650
groupby()是一个分组函数,对数据进行分组操作的过程可以概括为:split-apply-combine三步:
1.按照键值(key)或者分组变量将数据分组。
2.对于每组应用我们的函数,这一步非常灵活,可以是python自带函数,可以是我们自己编写的函数。
3.将函数计算后的结果聚合。
举例:
df = pd.DataFrame({'key1':list('aabba'),
'key2': ['one','two','one','two','one'],
'data1': [8,6,2,4,3],
'data2': [6,9,5,2,-7]})
print df
输出:
data1 data2 key1 key2
0 8 6 a one
1 6 9 a two
2 2 5 b one
3 4 2 b two
4 3 -7 a one
下面这两句效果是一样的。
df.groupby('key1',as_index=False).mean()
df.groupby(['key1'],as_index=False).mean()
输出:
key1 data1 data2
0 a 5.666667 2.666667
1 b 3.000000 3.500000
注意groupby之后的数据类型,它不再是一个dataframe,而是一个GroupBy对象,我们后面函数的任何操作都是基于这个对象的。
刚刚我们只是用了key1进行了分组,我们也可以使用两个分组变量:
df.groupby(['key1','key2']).mean()
print '-----------------'
df.groupby(['key1','key2'],as_index=False).mean()
输出:
data1 data2
key1 key2
a one 5.5 -0.5
two 6.0 9.0
b one 2.0 5.0
two 4.0 2.0
-----------------
key1 key2 data1 data2
0 a one 5.5 -0.5
1 a two 6.0 9.0
2 b one 2.0 5.0
3 b two 4.0 2.0
从上面可以看出,as_index=False与默认的True的区别来,加入as_index=False 属性是"SQL-style"的分组输出。
实际上分组键可以是任何长度适当的数组
states=np.array(['Ohio','California','California','Ohio','Ohio'])
years=np.array([2005,2005,2006,2005,2006])
print df['data1'].groupby([states,years]).mean()
把data1列按照states和years分组,输出:
California 2005 6
2006 2
Ohio 2005 6
2006 3
注意,像下面这么写是错误的:
print df['data1'].groupby(['key1']).mean()
如果前面是df[‘data1’]的形式,后面要这样写:
print df['data1'].groupby(df['key1']).mean()
输出:
key1
a 5.666667
b 3.000000
Name: data1, dtype: float64
这么写也是可以的,输出和上面一样:
print df.groupby(['key1'])['data1'].mean()