如何为每个组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_4
和GRADE_5
的平均值):
DAY HOUR GRADE_4 GRADE_5
1 7 25 41
1 8 37 42
答案 0 :(得分:1)
您可以尝试这样的操作,这会将Grade4
和Grade5
的总计数分为Day
和Hour
。如果您需要每月平均计数,则可以将成绩列除以唯一月份的数量:
df.GRADE = "GRADE_" + df.GRADE.astype(str)
(df.groupby(["DAY", "HOUR", "GRADE"]).MONTH.count()
.rename_axis(("DAY", "HOUR", ""))
.unstack(level=2).reset_index())
答案 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接受的可能的聚合功能而感到困扰。