沧海拾珠

Pandas中Groupby的使用

1. Groupby用于数据分组

1
2
3
4
5
6
7
8
9
10
import pandas as pd
import numpy as np
df = pd.DataFrame([('bird', 389.0),('bird', 24.0),('mammal', 80.5),('mammal', np.nan)],
index=['falcon', 'parrot', 'lion', 'monkey'],
columns=('class', 'max_speed'))
class max_speed
falcon bird 389.0
parrot bird 24.0
lion mammal 80.5
monkey mammal NaN

对class进行分组并打印出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
new_df = df.groupby(['class'])
for key,value in new_df:
print(key)
print(value)
#分组结果
bird
class max_speed
falcon bird 389.0
parrot bird 24.0
mammal
class max_speed
lion mammal 80.5
monkey mammal NaN

2. groupby().mean() 计算分组后的平均值,只有numerical值才会纳入计算

1
2
3
4
5
6
df.groupby(['class']).mean()
max_speed
class
bird 206.5
mammal 80.5

3. groupby.agg() 聚合函数的使用

可以将多个函数聚合在一起使用,非常的方面快捷。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
>>> df = pd.DataFrame({'A': [1, 1, 2, 2],
... 'B': [1, 2, 3, 4],
... 'C': np.random.randn(4)})
>>> df
A B C
0 1 1 0.362838
1 1 2 0.227877
2 2 3 1.267767
3 2 4 -0.562860
# 以A分组,并找出每组最小及最大值。
>>> df.groupby('A').agg(['min', 'max'])
B C
min max min max
A
1 1 2 0.227877 0.362838
2 3 4 -0.562860 1.267767
# 以A分组,选择B列中的最小最大值。
>>> df.groupby('A').B.agg(['min', 'max'])
min max
A
1 1 2
2 3 4
# 以A分组,对B和C列分别操作
>>> df.groupby('A').agg({'B': ['min', 'max'], 'C': 'sum'})
B C
min max sum
A
1 1 2 0.590716
2 3 4 0.704907

4. 其他函数

  • groupby.size()
  • groupby.count()
  • groupby.first(), groupby.last()
  • groupby.head(), groupby.tail()
  • groupby.max(), groupby.min(),获得分组数据中最大/最小的值