【问题标题】:Pandas derived column for number of work days between 2 datesPandas 派生列表示两个日期之间的工作日数
【发布时间】:2020-07-10 01:38:47
【问题描述】:

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]'))

【问题讨论】:

    标签: python-3.x numpy derived-column


    【解决方案1】:

    我找到了解决方法,但很确定这不是最好的方法...

    # 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)
    

    【讨论】:

      猜你喜欢
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多