Pandas производная колонка для количества рабочих дней между 2 датами - PullRequest
0 голосов
/ 29 марта 2020

numpy busdays_count работает, но когда я применяю его к кадру данных, я получаю ошибки, потому что некоторые даты являются NaT (правильно).

Если бы это был обычный массив, я мог бы выполнять итерацию каждой строки проверьте, если NaT, а затем примените формулы, но не уверены здесь ...

data_raw['due'] = pd.to_datetime(data_raw['Due Date'], format="%Y%m%d")
data_raw['clo'] = pd.to_datetime(data_raw['Closed Date'], format="%Y%m%d")

data_raw['perf'] = data_raw.apply(lambda row: np.busday_count(row['due'].values.astype('datetime64[D]'),
                                row['clo'].values.astype('datetime64[D]')
                                if pd.isnull(row['clo'])
                                else '',
                                axis=1
                                ))

Ошибка KeyError: 'due'

Это работает ниже, но не обязательно при присоединении:

p_df = data_raw[pd.notna(data_raw.clo)]
p_df['perf'] = np.busday_count(p_df['due'].values.astype('datetime64[D]'), p_df['clo'].values.astype('datetime64[D]'))

1 Ответ

0 голосов
/ 29 марта 2020

Я нашел работу, но уверен, что это не лучший способ ...

# split the dataframe
not_na = data_raw[pd.notna(data_raw.clo)]
is_na = data_raw[pd.isna(data_raw.clo)]

# do the calc without the NaNs
not_na['perf'] = 
          np.busday_count(not_na['due'].values.astype('datetime64[D]'), 
                          not_na['clo'].values.astype('datetime64[D]'))

# lastly, join the dataframes back
new_df = pd.concat([is_na, not_na], axis=0)
...