Pandas之groupby分組


釋義

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函數。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章