Pandas之groupby分組
阿新 • • 發佈:2021-06-15
釋義
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函式。