Работайте с коллегами, работающими полный или неполный рабочий день, на основе декларируемой переменной часа - PullRequest
0 голосов
/ 12 октября 2018

это скорее руководство / наводит меня в правильном направлении.

Проблема!

У меня есть проблема на работе, которую я сейчас решаю, используя очень очень длинную формулу Excel.

Я в основном назначаю переменную часов (назовем это h) 500 магазинам

Затем я объявляю распределение часов для коллег на полный рабочий день и на неполный рабочий день (футы и точки)

Формула у меня на данный момент работает на основе нет.часов, сколько FT может работать там, и после того, как распределение FT исчерпано (в основном это не может быть разделено / мод на общее количество часов), оно тогда работает на число коллег по pt.

в математическом выражении Я выделяю 20 часов для хранения A

магазина A Коллеги FT работают 12 часов, а PT работают 6

на основе этого магазинаА может вместить 1 фут, 1 час и 2 часа в качестве остатка.

Я хотел бы сделать это на Python и подумал, что это будет хороший первый real-ish проект для работы.

Решение до сих пор,

То, что я пробовал, - это начать выделение функции, которая принимает в качестве аргументов значения ft, pt и h и выплевывает количество FT и PT, сколько часов может вместить.Я бы тогда хотел добавить это в фрейм данных панд.Тем не менее, я не мог решить это некоторое время сейчас ... и я понятия не имею, что искать на SO

  def (full_time, part_time,hours):
    for hours in full_time:
        if hours < full_time or part_time:
            return full_time
        elif hours >= full_time
            return full_time
        elif hours >= full_time ....

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Этот ответ основан на предположении, что у вас есть существующий Dataframe, который предоставляет три входа.Вы можете создать новый столбец / поле, используя функцию применения панд.Применить принимает ваши входные данные, применяет вашу функцию, а затем возвращает результаты в новом поле.

0 голосов
/ 12 октября 2018

То, что я пробовал, - это начать выделение функции, которая принимает в качестве аргументов значения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...