A key step can be to use IF to filter the data
= IF( Data[Name]=@name, Data[Numbers] )
Alternatively this can be done using the FILTER function
= FILTER( Data[Numbers], Data[Name]=@name)
From there, one simply nest the array within the chosen function e.g.
= MEDIAN( IF( Data[Name]=@name, Data[Numbers] ) )
In the case of MAX, MAXIFS offers a simpler solution and returns the results for each name as a single dynamic array
= MAXIFS( Data[Numbers], Data[Name], name )