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

时间:2019-02-25 06:21:53

标签: python pandas datetime dataframe

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

我有一个看起来像这样的数据框:

将熊猫作为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 :(得分:0)

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日之间只有一个营业日空缺。