Python: как отсортировать по дате и найти пробелы - PullRequest
0 голосов
/ 25 февраля 2019

Я искал ответ, но не смог найти!

У меня есть фрейм данных, который выглядит следующим образом:

импорт панд как pd

df = pd.DataFrame({'Cust_Name' : ['APPT1', 'APPT1','APPT2','APPT2'],
               'Move_In':['2013-02-01','2019-02-01','2019-02-04','2019-02-19'],
               'Move_Out':['2019-01-31','','2019-02-15','']})

Яищу способ расчета вакансии.APPT1 был занят с 2013-02-01 по 2019-01-31 и снова со следующего дня 2019-02-01.Таким образом, вакансия для APPT1 равна 0 и в настоящее время занята.APPT2 был занят с 2019-02-04 по 2019-02-15 и снова с 2019-02-19.Таким образом, вакансия на APPT2 составляет 2 рабочих дня и в настоящее время занята.NaT: означает занятый или занятый в данный момент.

TIA

1 Ответ

0 голосов
/ 25 февраля 2019
df = pd.DataFrame({
    'Cust_Name': ['APPT1', 'APPT1','APPT2','APPT2'],
    'Move_In': ['2013-02-01','2019-02-01','2019-02-04','2019-02-19'],
    'Move_Out': ['2019-01-31','','2019-02-15','']
})
df['Move_In'] = df['Move_In'].astype('datetime64')
df['Move_Out'] = df['Move_Out'].astype('datetime64')
df['Prev_Move_Out'] = df['Move_Out'].shift()
    Cust_Name   Move_In     Move_Out    Prev_Move_Out
0   APPT1   2013-02-01  2019-01-31      NaT
1   APPT1   2019-02-01  NaT             2019-01-31
2   APPT2   2019-02-04  2019-02-15      NaT
3   APPT2   2019-02-19  NaT             2019-02-15
def calculate_business_day_vacancy(df):
  try:
      return len(pd.date_range(start=df['Prev_Move_Out'], end=df['Move_In'], freq='B')) - 2
  except ValueError:
      # Consider instead running the function only on rows that do not contain NaT.
      return 0

df['Vacancy_BDays'] = df.apply(calculate_business_day_vacancy, axis=1)

Вывод

Cust_Name   Move_In     Move_Out    Prev_Move_Out   Vacancy_BDays
0   APPT1   2013-02-01  2019-01-31      NaT         0
1   APPT1   2019-02-01  NaT             2019-01-31  0
2   APPT2   2019-02-04  2019-02-15      NaT         0
3   APPT2   2019-02-19  NaT             2019-02-15  1

Обратите внимание, что в период с 15 февраля 2019 по 19 февраля существует только одна вакансия Рабочий день 2019

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...