DataFrame的groupby()函数

版权声明:本文为博主原创文章,转载请注明出处 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()

猜你喜欢

转载自blog.csdn.net/jingshuiliushen_zj/article/details/83211650