То, что я пробовал, - это начать выделение функции, которая принимает в качестве аргументов значения ft, pt и h и выплевывает количество FT и PT, которое может вместить количество часов.
Насколько я понимаю, у вас есть три входные переменные и три выходных.В данном магазине с выделенным total_hours
есть сотрудники FT, которые могут работать ft_hours
, и сотрудники PT, каждый из которых может работать pt_hours
.Вы хотите узнать количество работников FT и работников PT, которые нужно распределить, а остаток - при условии, что ни один из сотрудников не будет работать в полусмены.
def alloc_hours(
ft_hours: int,
pt_hours: int,
total_hours: int
) -> tuple:
"""Calculate hour-allocation for given store.
ft_hours: The number of hours a full-time emp. works.
pt_hours: The number of hours a part-time emp. works.
total_hours: The total hours allocated to the store.
Returns: tuple
1st element: num. of full-time workers.
2nd element: num. of part-time workers.
3rd element: remainder hours.
"""
ft_workers, remainder = divmod(total_hours, ft_hours)
pt_workers, remainder = divmod(remainder, pt_hours)
return ft_workers, pt_workers, remainder
Примеры:
>>> alloc_hours(12, 6, 20)
(1, 1, 2)
>>> alloc_hours(8, 6, 20)
(2, 0, 4)
>>> alloc_hours(8, 6, 24)
(3, 0, 0)
В пандах:
import pandas as pd
data = {
'ft_hours': [12, 8, 10, 8, 12, 10, 8, 8],
'pt_hours': [6, 4, 6, 6, 6, 4, 4, 6],
'total_hours': [20, 20, 24, 40, 30, 20, 10, 40]
}
data = pd.DataFrame(data)
# Pandas supports vectorization, so each of these results is a Series.
ft_workers, remainder = divmod(data['total_hours'], data['ft_hours'])
pt_workers, remainder = divmod(remainder, data['pt_hours'])
data = data.assign(
ft_workers=ft_workers,
pt_workers=pt_workers,
remainder=remainder
)
Результат:
>>> data
ft_hours pt_hours total_hours ft_workers pt_workers remainder
0 12 6 20 1 1 2
1 8 4 20 2 1 0
2 10 6 24 2 0 4
3 8 6 40 5 0 0
4 12 6 30 2 1 0
5 10 4 20 2 0 0
6 8 4 10 1 0 2
7 8 6 40 5 0 0