釋義
groupby
用來分組,調用groupby
之後返回pandas.core.groupby.generic.DataFrameGroupBy
,其實就是由一個個格式爲(key, 分組後的dataframe)
的元組,組成的列表:
[(key1, dataframe1), (key2, dataframe2), ...]
案例
- 初始化數據,此時這個班級有2個同名的人都叫Jack
df = pd.DataFrame({'stu_name': ['Tom', 'Tony', 'Jack', 'Jack'], 'stu_age': [16, 16, 15, 21]})
print(df)
stu_name stu_age
0 Tom 16
1 Tony 16
2 Jack 15
3 Jack 21
- 根據
stu_name
進行分組,根據上面的釋義,則可以遍歷列表中的每個元組
groups = df.groupby(['stu_name'])
for v in groups:
print(v)
('Jack', stu_name stu_age
2 Jack 15
3 Jack 21)
('Tom', stu_name stu_age
0 Tom 16)
('Tony', stu_name stu_age
1 Tony 16)
顯而易見,每個元素v中,v[0]是groupby的列名,v[1]就是該分組下的dataframe
groupby之後的聚合操作
groupby之後更常見的是使用各種聚合函數,如
- min:最小值
- max:最大值
- sum:總和
- mean:平均值
- median:中位數
- count:計數
- var:方差
- std:標準差
案例
- 初始化數據
df = pd.DataFrame({'stu_name': ['Tom', 'Tony', 'Jack', 'Jack'], 'stu_age': [16, 16, 15, 21], 'stu_score': [99, 1, 1, 0]})
stu_name stu_age stu_score
0 Tom 16 99
1 Tony 16 1
2 Jack 15 1
3 Jack 21 0
- 以名字分組,並對分組後的年齡、成績求和(例子不具備顯示意義,僅做演示)
sum_df = df.groupby(['stu_name']).sum()
print(sum_df)
stu_age stu_score
stu_name
Jack 36 1
Tom 16 99
Tony 16 1
groupby之後直接調用聚合函數,會對所有的列進行聚合操作,但有些時候需要在分組後對多個列進行不同的聚合操作,比如groupby之後,年齡求和,分數求平均值,這時候就需要使用agg函數
groupby之後使用agg函數
- 沿用上面的原始數據,以名字分組,分組後年齡求和,成績求平均值
agg_df = df.groupby(['stu_name']).agg({'stu_age': 'sum', 'stu_score': 'mean'})
print(agg_df)
stu_age stu_score
stu_name
Jack 36 0.5
Tom 16 99.0
Tony 16 1.0
可以看出如果groupby後要對分組內所有的列都進行一樣的操作,那直接調用相關的聚合函數即可,如果是分組後不同的列進行不同的聚合操作,則可以直接採用agg函數。