У меня есть объект Groupby под названием GradeGroup. Это группа с несколькими индексами, "Класс", а затем "HeatNumber". В Dataframe есть столбец "Ontime", и я показываю максимальные значения этого столбца следующим образом:
GradeGroup.Ontime.max()
Grade HeatNumber
150HP 19258 45.8
19259 45.3
19260 35.6
19280 46.0
19281 50.0
19282 46.1
19283 39.5
A100C 19187 47.0
19243 39.8
19244 40.5
19245 37.1
A100X 19261 50.7
LOWO2A100 19215 42.0
19216 40.5
19217 38.4
19237 44.8
19238 43.7
19239 42.7
19240 42.5
19241 45.4
19262 43.4
19263 42.9
19264 43.5
Как я могу получить среднее значение этих максимальных значений "Ontime", но за класс, так что среднее значение "Ontime" (максимальных значений) для класса 150HP равно (45,8 + 45,3 + 35,6 + 46,0 + 50,0 + 46,1 + 39,5)/7 или 44,0. Я ищу что-то вроде этого:
Grade
150HP 44.0
A100C 41.1
A100X 50.7
LOWO2A100 42.7
Используйте max
снова, но с аргументом level
GradeGroup.Ontime.max().mean(level=0)
Вы можете использовать groupby()
, agg()
и mean()
:
df.groupby(['Grade','HeatNumber']).agg({'Ontime': 'max'}).mean(level=0)
Вот рабочий пример:
df = pd.DataFrame({'Grade': ['150HP', '150HP', '150HP', 'A100C', 'A100C', 'A100X', 'A100X', 'A100X', 'LOWO2A100'],
'HeatNumber': ['19258', '19258', '19260','19187', '19787', '19261', '19261', '19237', '19262'],
'Ontime': [45.8, 39.5, 42.8, 31.6, 65.5, 25.4, 65.1, 21.5, 32.4]})
дает:
Grade HeatNumber Ontime
0 150HP 19258 45.8
1 150HP 19258 39.5
2 150HP 19260 42.8
3 A100C 19187 31.6
4 A100C 19787 65.5
5 A100X 19261 25.4
6 A100X 19261 65.1
7 A100X 19237 21.5
8 LOWO2A100 19262 32.4
Применяя строку выше:
Ontime
Grade
150HP 44.30
A100C 48.55
A100X 43.30
LOWO2A100 32.40
df.groupby(['Grade','HeatNumber']).agg({'Ontime': 'max'}).mean()