Как отсортировать столбец по данным из другого столбца

В таблице cars есть столбец ID_person - владельцев авто. Есть таблица person, в ней столбец ID, столбец weight и height. Задача отсортировать таблицу cars по Вес/рост владельца. Проблема в том, что размер таблицы person 20000 уникальных людей, а cars - 15000 при этом у одного человека может или не быть машины или быть несколько. Я пробовал создать столбец w/h разделив столбец Weight на Height и отсортировать таблицу people по столбцу w/h с помощью people.sort_values['w/h'] и пробовал отсортировать cars так cars.sort_values[people['ID']]. Но ничего не вышло.

Вот пример таблицы cars

 ID  ID_person Model
  0    3       LADA
  1    2      Toyota
  2    1      Toyota
  3    3      Daewoo
  4    4      Subaru

Вот пример таблицы people после сортировки по w/h

 ID      Name         Height   Weight          h_w
  5 Журавлёвa Ия       184      40    0.21739130434782608
  4 Пестовa Снежана    183      40    0.2185792349726776
  1 Исаковa Мария      184      41    0.22282608695652173
  2 Зуевa Альбина      179      40    0.22346368715083798
  3 Горбуновa Эдита    183      41    0.22404371584699453

Надо получить cars в таком виде

 ID, ID_person Model
  4    4      Subaru
  2    1      Toyota
  1    2      Toyota
  0    3       LADA
  3    3      Daewoo

Ответы (1 шт):

Автор решения: MaxU

попробуйте так:

res = (cars
       .merge(pers.eval("x=Weight/Height"), 
              left_on="ID_person", right_on="ID", 
              suffixes=["", "_2"])
        .sort_values("x")
        [cars.columns])

результат:

In [80]: res
Out[80]:
   ID  ID_person   Model
4   4          4  Subaru
3   2          1  Toyota
2   1          2  Toyota
0   0          3    LADA
1   3          3  Daewoo
→ Ссылка