Как сделать вычитание даты из преобразования даты только в рабочие дни, когда есть нулевые значения? - PullRequest
0 голосов
/ 15 октября 2019

Мне нужно рассчитать разницу между двумя полями дат в кадре данных. При выполнении расчетов я должен следовать приведенным ниже условиям.

  1) Include only count working days doing subraction i.e exclude saturday and sunday while doing the calculations.
  2) If Date 1 is null populate the difference as Null
  3)If Date 2 is null populate the difference as Null

**Sample Data**
Date1                  Date2
1/10/2019 17:24   15/2/2019 17:41
8/1/2019 12:04    11/1/2019 10:02
                  16/1/2019 11:30
21/1/2019 16:30  
23/1/2019 20:35  30/1/2019 12:35

7/1/2019 17:58   8/1/2019 14:18
24/1/2019 11:50  25/1/2019 8:00
                 1/3/2019 13:00
7/1/2019 12:55   8/1/2019 15:03

Я пробовал с приведенным ниже кодом

 data['date_diff'] = ((pd.to_datetime(data['date2']) -  pd.to_datetime(data['date1'])) .dt

Но ломается, когда есть нулевое значение. Как это исправить

1 Ответ

0 голосов
/ 15 октября 2019

Конечно, есть более элегантный способ, но вы можете подумать о том, чтобы играть с этого

import pandas as pd
import numpy as np

date1 = "1/10/2019 17:24,8/1/2019 12:04,,21/1/2019 16:30, 23/1/2019 20:35,,7/1/2019 17:58,24/1/2019 11:50,,7/1/2019 12:55"
date2 = "15/2/2019 17:41,11/1/2019 10:02,16/1/2019 11:30,,30/1/2019 12:35,,8/1/2019 14:18,25/1/2019 8:00,1/3/2019 13:00,8/1/2019 15:03"
df = pd.DataFrame({"date1":date1.split(','),
                   "date2":date2.split(',')})

for col in df.columns:
    df[col] = pd.to_datetime(df[col])

def fun(row):
    if row.isnull().any():
        return np.nan
    ts = pd.DataFrame(pd.date_range(row["date1"],row["date2"]), columns=["date"])
    ts["dow"] = ts["date"].dt.weekday
    return (ts["dow"]<5).sum()

df["diff"] = df.apply(lambda x: fun(x), axis=1)

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