如何计算分组数据的平均条目数

2024-06-01 07:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

如何计算每个组<Day,Hour>GRADE等于45的条目的平均数?例如,这些应该是月内第1天和第7小时的平均值,月内第1天和第8小时的平均值,等等

MONTH DAY  HOUR  GRADE
1     1    7     4
1     1    7     4
1     1    7     4
1     1    7     4
1     1    8     5
1     1    8     4
2     1    7     5
2     1    7     5
2     1    7     4
2     1    7     4
2     1    8     5
2     1    8     5

如果我这样做,它会统计每个组的所有条目。你知道吗

grouped = df.groupby(['DAY','HOUR'], as_index=0)['GRADE'].agg(['count'])

但是,我需要以下格式的输出(发明了GRADE_4GRADE_5的平均值):

DAY  HOUR  GRADE_4  GRADE_5
1    7     25       41
1    8     37       42

Tags: 目的dfas条目平均值grade小时groupby
3条回答
  • ['MONTH', 'DAY', 'HOUR', 'GRADE']上分组以获得所有维度的分数。你知道吗
  • 分组于['DAY', 'HOUR', 'GRADE']以获得每月平均值。你知道吗

df.groupby(['MONTH', 'DAY', 'HOUR', 'GRADE']).size() \
    .groupby(level=['DAY', 'HOUR', 'GRADE']).mean().unstack() \
    .rename_axis([None], 1).rename(columns='GRADE_{}'.format) \
    .reset_index()

   DAY  HOUR  GRADE_4  GRADE_5
0    1     7      3.0      2.0
1    1     8      1.0      1.5

你只需要改变一个关键字。你知道吗

data =  {'MONTH': [1,1,1,1,1,1,2,2,2,2,2,2],                             
    ...:         'DAY': [1,1,1,1,1,1,1,1,1,1,1,1],
    ...:         'HOUR': [7,7,7,7,8,8,7,7,7,7,8,8],
    ...:         'GRADE': [4,4,4,4,5,4,5,5,4,4,5,5]}

df = pd.DataFrame(data) 

grouped = df.groupby(['DAY','HOUR'], as_index=0)['GRADE'].agg(['count'])
>>>           count
DAY HOUR       
1   7         8
    8         4

averaged = df.groupby(['DAY','HOUR'], as_index=0)['GRADE'].agg(['mean'])
>>>           mean
DAY HOUR      
1   7     4.25
    8     4.75

无意冒犯,我很惊讶你居然懒得用谷歌搜索熊猫接受的聚合函数。你知道吗

您可以尝试这样的操作,这将给出由DayHour分组的Grade4Grade5的总计数。如果需要每月平均计数,可以将“成绩”列除以唯一月数:

df.GRADE = "GRADE_" + df.GRADE.astype(str)

(df.groupby(["DAY", "HOUR", "GRADE"]).MONTH.count()
   .rename_axis(("DAY", "HOUR", ""))
   .unstack(level=2).reset_index())

enter image description here

相关问题 更多 >