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

时间:2016-12-27 21:30:57

标签: python pandas

如何为每个组GRADE计算4等于5<Day,Hour>的条目的平均数?例如,这些应该是fpr第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

3 个答案:

答案 0 :(得分:1)

您可以尝试这样的操作,这会将Grade4Grade5的总计数分为DayHour。如果您需要每月平均计数,则可以将成绩列除以唯一月份的数量:

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

答案 1 :(得分:1)

  • 分组['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

答案 2 :(得分:-1)

您只需要更改一个关键字。

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

没有冒犯,我很惊讶你不会因为谷歌接受Pandas接受的可能的聚合功能而感到困扰。