约定第一行代码

import numpy as np
import pandas as pd

GroupBy分组

对数据进行分组并对每个分组进行运算是数据分析中很重要的环节

该文章讲解了利用pandas的Groupby技术如何进行分组

下图简单介绍了分组的过程
图1

创建DataFrame对象

df1=pd.DataFrame({'Data1':np.random.randint(0,10,5),
                  'Data2':np.random.randint(10,20,5),
                  'key1':list('aabba'),
                  'key2':list('xyyxy')})
df1

代码结果

Data1Data2key1key2
0515ax
1215ay
2617by
3916bx
4913ay

分组特性和查看分组后的大小

.groupby()返回的是pandas的groupby对象。gr1并未进行任何计算,但它包括了接下来计算所需的数据

gr1=df1['Data1'].groupby(df1['key1'])
print(gr1)
gr1.size()

#代码结果
<pandas.core.groupby.SeriesGroupBy object at 0x00000220D1A1EC88>
key1
a    3
b    2
Name: Data1, dtype: int64

根据单列来对单列分组

df1['Data1'].groupby(df1['key1']).count()

#代码结果
key1
a    3
b    2
Name: Data1, dtype: int64

根据单列来对多列分组

df1[['Data1','Data2']].groupby(df1['key1']).mean()

代码结果

Data1Data2
key1
a5.33333314.333333
b7.50000016.500000

根据多列对单列分组

值得注意的是,下例通过两列分组得到的是多级索引的Series对象,groupby()里面分组顺序不同而结果不同

key1  key2
a     x       1
      y       2
b     x       1
      y       1
Name: Data1, dtype: int64

根据多列对多列分组

df1.groupby([df1['key1'],df1['key2']]).sum()

图2

  • 除了上述用Series对象作为分组的依据,还可以是:列表、数组、字符串、字典等等
#列表
df1['Data1'].groupby([1,2,3,2,1]).count()

#代码结果
1    2
2    2
3    1
Name: Data1, dtype: int64
#数组
df1['Data1'].groupby(np.array([2,1,2,1,1])).count()

#代码结果
1    3
2    2
Name: Data1, dtype: int64
#字典 
df1['Data1'].groupby({0:'y',1:'x',2:'x',3:'y',4:'z'}).count()

#代码结果
x    2
y    2
z    1
Name: Data1, dtype: int64

"麻烦列"被消除

当分组后进行shu数值计算时,不是数值类的列(即麻烦列)会被清除

df1.groupby('key2').mean()

代码结果

Data1Data2
key2
x7.00000015.5
y5.66666715.0

取分组后的一列或某几列

df1.groupby('key1')['Data1'].max()

#代码结果
key1
a    9
b    9
Name: Data1, dtype: int32

传入axis = 1 横向分组

df1.groupby([1,1,2,1],axis=1).count()

代码结果

12
031
131
231
331
431

最后分享一下分组后可以运行的简单运算函数表
图3


世界因代码而改变 Peace Out
世界因代码而改变 Peace Out
最后修改:2020 年 10 月 07 日 03 : 20 PM
如果觉得我的文章对你有用,请随意赞赏