[Pandas]Groupby函数

官方文档语法格式:

DataFrame.groupby(by=Noneaxis=0level=Noneas_index=Truesort=Truegroup_keys=_NoDefault.no_defaultsqueeze=_NoDefault.no_defaultobserved=Falsedropna=True)

其中有很多参数,具体参数含义可参考官方文档:

pandas.DataFrame.groupby — pandas 1.5.0 documentation

作用就是对DataFrame进行分组,可以单类分组,也可以多类分组

使用单特征对数据进行分类:

 

in:
import pandas as pd
import numpy as np
df = pd.DataFrame({'key1':list('aabba'),'key2':[1,2,1,2,1],'data1':np.random.randn(5),'data2':np.random.randn(5)})
df

out:
	key1	key2	data1	data2
0	a	1	-1.682936	0.888643
1	a	2	-1.620872	-0.071639
2	b	1	-0.556014	0.222129
3	b	2	-0.643906	0.067793
4	a	1	-0.189291	0.411055

in:
grouped = df.groupby(['key1'])
for i,j in grouped:
    print(i)
    print(j)

out:
a
  key1  key2     data1     data2
0    a     1 -1.682936  0.888643
1    a     2 -1.620872 -0.071639
4    a     1 -0.189291  0.411055
b
  key1  key2     data1     data2
2    b     1 -0.556014  0.222129
3    b     2 -0.643906  0.067793

注意:groupby函数产生的结果是个迭代器,若打印输出data.groupby([‘分组字段’])的结果可能会运行处以下结果:

in:
df.groupby(['key1'])

out:

要输出具体的结果详情可以用for循环读取(参考下文举例中的代码),其中每个分组结果中包含 分组名称(下文举例代码中:name)和分组记录(下文举例代码中:group)

根据多特征进行划分

in:
grouped2 = df.groupby(['key1','key2'])
for name,group in grouped2:
    print(f"划分的依据为: {name}")
    print(group)

out:
划分的依据为: ('a', 1)
  key1  key2     data1     data2
0    a     1 -1.682936  0.888643
4    a     1 -0.189291  0.411055
划分的依据为: ('a', 2)
  key1  key2     data1     data2
1    a     2 -1.620872 -0.071639
划分的依据为: ('b', 1)
  key1  key2     data1     data2
2    b     1 -0.556014  0.222129
划分的依据为: ('b', 2)
  key1  key2     data1     data2
3    b     2 -0.643906  0.067793

对DataFrame中的部分数据进行划分

in:
for name,group in df[['data1','data2','key1']].groupby(['key1']):
    print(name)
    print(group)

out:
a
      data1     data2 key1
0 -1.682936  0.888643    a
1 -1.620872 -0.071639    a
4 -0.189291  0.411055    a
b
      data1     data2 key1
2 -0.556014  0.222129    b
3 -0.643906  0.067793    b

你可能感兴趣的:(pandas,python,数据分析)