в среднем по группе с мультииндексом в пандах - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть объект 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», но для классатак что среднее значение «по времени» (из максимумов) для класса 150 л.с. составляет (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 ]

0 голосов
/ 24 сентября 2018

Вы можете использовать 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
0 голосов
/ 24 сентября 2018

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

GradeGroup.Ontime.max().mean(level=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...