What you want is to have an "associative array" between the number and the name. In Python that is done with a dictionary, where the key is the number and the value is the name.
You could do it with this:
name = ['John', 'Joe','Jae']
number = ['10','20','30']
num_to_name = { int(number): name for number, name in zip(number, name) }
print(num_to_name[max(num_to_name)])
The notation { x: y for x, y in collection }
is called a dict comprehension and is an efficient way of defining a dictionary when all values are known.
Also notice that I took the liberty to convert the numbers to integers when using them as keys, because if you keep them as strings, you might have surprises, like:
numbers = ["90", "100"]
max(numbers)
'90'
Here, as they are strings, a lexicographical order search would be performed, and as the character '9' happens after character '1', then the program would assume that '90' is bigger than '100'.
Using integers you'd get the behaviour you'd expect.