в среднем по группе с мультииндексом в пандах

1

У меня есть объект 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
  • 2
    Можете ли вы привести минимальный воспроизводимый пример ? Построение информационного кадра из вашего вывода утомительно.
  • 1
    df.groupby(['Grade','HeatNumber']).agg({'Ontime': 'max'}).mean()
Теги:
pandas
pandas-groupby
aggregate

2 ответа

1

Используйте max снова, но с аргументом level

GradeGroup.Ontime.max().mean(level=0)
  • 0
    Это определенно работает !! Спасибо!
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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню