Python:如何按日期按时间顺序排序并找到任何差距



我搜索了答案,但找不到!

我有一个看起来像:

的数据框架

将大熊猫作为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

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

请注意,2019年2月15日至2019年2月19日之间只有一个工作日

最新更新