1 写在前面的总结:
放在前面的要求——对于groupy的掌握:
1 对于分组的实质
对于分组的实质有点像sql中groupby的分组——就是拿出满足条件的行,汇集和进行分组排序。
可以看成DataFrame(但是是groupby类型)
2 分组后的运算(或者统计函数)
.mean()函数,对应有数字的列的均值 df.groupby('A').mean()
.sum()函数,对应分类后数字的列的总数 df.groupby('A').std()
.等
#DataFrame.groupby(by=None, axis=0, level=None, as_index=True,
sort=True, group_keys=True, squeeze=, observed=False, dropna=True)
#常用参数说明:
1) as_index = True(默认),表示使用分组标签作为索引,False则表示自增序列变为索引!
2 groupby()的实质
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})
df.iloc[0,2] = np.nan
display(df)
A | B | C | D | |
---|---|---|---|---|
0 | foo | one | NaN | -1.004843 |
1 | bar | one | -1.374259 | -0.178051 |
2 | foo | two | 1.419001 | 0.278659 |
3 | bar | three | -0.367165 | 1.577527 |
4 | foo | two | -1.243161 | 1.205420 |
5 | bar | two | -0.574929 | -1.776985 |
6 | foo | one | 1.138710 | -1.004556 |
7 | foo | three | -0.175424 | 0.490470 |
2.1 首先看看groupby的实质:
##groupby后依旧是可以看成DataFrame形式
##得但是强调的是groupby类型,使用聚合函数进行访问!
df1 = df.groupby(['A']).apply(lambda x:print(x))
display(df1)
A B C D
1 bar one -1.374259 -0.178051
3 bar three -0.367165 1.577527
5 bar two -0.574929 -1.776985
A B C D
0 foo one NaN -1.004843
2 foo two 1.419001 0.278659
4 foo two -1.243161 1.205420
6 foo one 1.138710 -1.004556
7 foo three -0.175424 0.490470
#例如访问各组下‘D’这一列的的均值——以标签作为索引
display(df.groupby(['A'],as_index=True)['D'].mean())
#例如访问各组下‘D’这一列的的均值——自增索引
display(df.groupby(['A'],as_index=False)['D'].mean())
A
bar -0.125837
foo -0.006970
Name: D, dtype: float64
A | D | |
---|---|---|
0 | bar | -0.125837 |
1 | foo | -0.006970 |
2.2 groupby使用聚合函数
#对A进行分为2组,对2组形成各种的列表,求取对应列表的均值
df.groupby(['A']).mean()
C | D | |
---|---|---|
A | ||
bar | -0.772118 | -0.125837 |
foo | 0.284782 | -0.006970 |
除了mean以外,还包括以下(于计算/描述统计)
多数用于纯数据的dataFrame,若含string–》取最大,dataFrame的类型为string
1)max
2)min
3)count 为每一列或每一行计算非NA单元
等等