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

2024-09-30 02:25:33 发布

您现在位置: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:指当前占用或当前占用。你知道吗

短暂性脑缺血发作


Tags: 数据答案nameindataframedfmoveout
1条回答
网友
1楼 · 发布于 2024-09-30 02:25:33
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日期间只有一个营业日空缺。你知道吗

相关问题 更多 >

    热门问题