Группировка и сортировка результирующей DataFrame из двух таблиц
Есть две таблицы:
People (id, Name, Salary, Sex, Profession)
Cars (id, id_polyuda, Mark)
Надо создать таблицу минимальных и максимальных зарплат в зависимости от пола, профессии и количества машин у одного человека. Вот исходные данные:
ID Name Profession Salary Sex
1 SMITH Author 40000 m
2 JOHNSON Bricklayer 4000 f
3 WILLIAMS Cleaner 41000 m
4 JONES Florist 4500 f
5 BROWN Librarian 3900 m
ID ID_person Model Price
0 5 LADA 100000
1 2 Toyota 50000
2 1 Toyota 600000
3 3 Daewoo 65000
4 4 Subaru 300000
Я пробовал так:
res = people.groupby("['salary'], sort = True", "['salary'], sort = False", ["Sex"], ["Profession"],)
А как посчитать машины из из таблицы Cars по ID_Person? К тому же не знаю как группировать.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
я бы делал это так:
car_stats = (cars
.groupby("ID_person")
.agg(cars_count=("Price", "size"), total_price=("Price", "sum"))
.rename_axis("ID")
.reset_index())
res = (people
.merge(car_stats, how="left")
.fillna(0)
.groupby(["Sex", "Profession", "cars_count"])
.agg(
min_salary=("Salary", "min"),
max_salary=("Salary", "max")
))
In [38]: res
Out[38]:
min_salary max_salary
Sex Profession cars_count
f Bricklayer 1 4000 4000
Florist 1 4500 4500
m Author 1 40000 40000
Cleaner 1 41000 41000
Librarian 1 3900 3900
PS в вопросе вы привели не очень удачный пример данных, т.к. у всех людей строго по одной машине. В своем ответе я исходил из того, что у одного человека может быть несколько машин или не быть машин вовсе.