【问题标题】:Python: How to chronologically sort by date and find any gapsPython:如何按日期按时间顺序排序并找到任何空白
【发布时间】:2019-02-25 06:21:53
【问题描述】:

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

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

将熊猫导入为 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 年 2 月 4 日至 2019 年 2 月 15 日被占用,并于 2019 年 2 月 19 日再次被占用。所以APPT2的空缺是2个工作日,目前已被占用。 NaT:表示当前占用或当前占用。

TIA

【问题讨论】:

  • 预期输出是什么?新专栏?另一个数据框?
  • 预期输出是一个新列
  • 你能在问题中添加预期的输出吗?我认为数字。

标签: python pandas datetime dataframe


【解决方案1】:
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 日之间只有一个工作日空缺。

【讨论】:

  • 完美运行。谢谢@ulmefors
猜你喜欢
  • 2022-01-17
  • 2012-08-16
  • 1970-01-01
  • 2021-03-27
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
相关资源
最近更新 更多