Используя Python рассчитать срок владения сотрудника в компании X - PullRequest
1 голос
/ 25 апреля 2020

У меня есть ситуация, когда мне нужно рассчитать срок службы сотрудника в компании X в годах. Данные доступны в следующем формате:

df =

EID      Event_Name                Event_Date
1        Hired                     03/09/1990  00:00:00
1        Terminated                14/10/2005  00:00:00
1        Rehired                   02/11/2015  00:00:00
2        Hired                     03/10/1990  00:00:00
2        Terminated                15/10/2005  00:00:00

Расчет срока владения достаточно прост для понимания:

Сначала вычислите разницу между Hired и Завершенная секунда Рассчитайте разницу между сегодняшней датой и Rehired (если применяется rehired, в противном случае игнорируйте)

Пример: Для EID = 1: срок владения:

  (LAST JOB WORKED WITH COMPANY X)         14/10/2005  00:00:00 - 03/09/1990  00:00:00 = 5520 days
  (REHIRED WITH COMP X AND STILL WORKING)  25/04/2020  00:00:00 - 02/11/2015  00:00:00 = 1636 days

Общий срок владения в днях = (5520 + 1636) / 365 = 19,6 года
и аналогично для других EID

Результат должен выглядеть следующим образом:

 EID      Tenure(Years)               
 1        19.6
 2        15.04

1 Ответ

2 голосов
/ 25 апреля 2020

Решение работает, если никогда не последовательно Terminated значений для групп в столбце Event_Name:

#converting to datetimes
df['Event_Date'] = pd.to_datetime(df['Event_Date'], dayfirst=True)

#today datetime
now = pd.Timestamp.now().floor('d')
#shifted rows per groups for terminated Event_Date 
df['new'] = df.groupby('EID')['Event_Date'].shift(-1).fillna(now)
#removed rows with Terminated
df = df[df['Event_Name'].ne('Terminated')].copy() 
#difference
df['Tenure(Years)'] = df['new'].sub(df['Event_Date'])
#aggregate sum
df = df.groupby('EID')['Tenure(Years)'].sum().dt.days.div(365).reset_index()
print (df)
   EID  Tenure(Years)
0    1      19.605479
1    2      15.043836
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...