python - 查找 pandas 数据框中两列之间的工作日,其中包含 NaT

标签 python pandas numpy

我的 pandas 数据框中有 2 列,我想计算它们之间的业务日期。

数据:

 ID     On hold     Off Hold
 101    09/15/2017  09/16/2017
 102    NA          NA
 103    09/22/2017  09/26/2017
 104    10/12/2017  10/30/2017
 105    NA          NA
 106    08/05/2017  08/06/2017
 107    08/08/2017  08/03/2017
 108    NA          NA

我使用 numpy 中的busday_count 尝试了以下代码:

 df1['On hold'] = pd.to_datetime(df1['On hold'])
 df1['Off Hold'] = pd.to_datetime(df1['Off Hold'])
 np.busday_count(df1['On hold'].values.astype('datetime64[D]'),df1['Off Hold'].values.astype('datetime64[D]'))

还有,

 np.where(pd.notnull(df1['On hold']),np.busday_count(df1['On hold'].values.astype('datetime64[D]'),
                                                df1['Off Hold'].values.astype('datetime64[D]')),0)

错误是:

   Cannot compute a business day count with a NaT (not-a-time) date

任何帮助将不胜感激:)

最佳答案

您可以尝试以下方法:

f = df1.dropna()
f['days'] = np.busday_count(pd.to_datetime(f['On hold']).values.astype('datetime64[D]'), \
            pd.to_datetime(f['Off hold']).values.astype('datetime64[D]'))

df1.merge(f[['ID', 'days']],on='ID', how='left')

关于python - 查找 pandas 数据框中两列之间的工作日,其中包含 NaT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46903848/

相关文章:

python - Pandas 在数据帧上合并,同时保持相同的行数

python - 无法在 AWS Lambda 上安装 Pandas

python - 如何在范围内为 i 向量化 np.dot(vector_a, vector_b[ :, i]) ?

python - 使用 NumPy 在 MPI4Py 中发送和接收结构化数组数据

python - 从 Numpy Ndarray 构建字典和列表

python - 使用方法名称字符串检索方法? Python

python - "painting"使用 python/numpy 将一个数组转换为另一个数组

python - 如何从处理程序中退出异步调度程序?

python - 无法使用 pip 安装 Python 图像库

python - RollingGroupby 上的 Pandas 聚合方法