2017-05-10 149 views
1

我想通過添加一個新的date_difference列來獲取兩個日期列之間的工作日。計算工作日,包括Python中兩個日期列的自定義假期

我試過了什麼?

bd = workday(ll.date_done,ll.order_date, cal) 
bd = networkdays(ll.date_done,ll.order_date, cal) 
km = np.busday_count(dd.date(), od.date(), holidays = cal) 

我正在收到一個錯誤。

'Series' object has no attribute 'days'

我在做什麼。

# Table Name: ll 
order_date date_done 
2017-04-09 2017-04-16 
2017-04-09 2017-04-18 
2017-04-10 2017-04-20 

我所期待:

order_date date_done  Date_Difference 
2017-04-09 2017-04-16  4 
2017-04-09 2017-04-18  7 
2017-04-10 2017-04-20  6 

我在做什麼計算?

我有假期列表,不包括我試圖從兩個日期得到工作日的差異。上面的date_difference計算只是虛擬數字。

回答

2

您可以使用numpy.bus_daycount()如果你傳遞正確的類型爲:

代碼:

df['date_diff'] = np.busday_count(
    df.order_date.values.astype('datetime64[D]'), 
    df.date_done.values.astype('datetime64[D]')) 

測試代碼:

import pandas as pd 
import numpy as np 

from io import StringIO 
df = pd.read_fwf(StringIO(u""" 
    order_date date_done 
    2017-04-09 2017-04-16 
    2017-04-09 2017-04-18 
    2017-04-10 2017-04-20"""), header=1) 
df.order_date = pd.to_datetime(df.order_date, infer_datetime_format=True) 
df.date_done = pd.to_datetime(df.date_done, infer_datetime_format=True) 

df['date_diff'] = np.busday_count(
    df.order_date.values.astype('datetime64[D]'), 
    df.date_done.values.astype('datetime64[D]')) 

print(df) 

結果:

order_date date_done date_diff 
0 2017-04-09 2017-04-16   5 
1 2017-04-09 2017-04-18   6 
2 2017-04-10 2017-04-20   8 
+0

它爲我,但我也有自定義列表放假象下面這樣: >>> custom_holidays = holidays.HolidayBase() >>> custom_holidays.append([ 「2000-01-01」, 「 2014-01-01「, 」2014-01-20「]) >>> cal =日曆(custom_holidays,['Sunday','Saturday']) 我在計算差異時必須包含這些內容。 錯誤: >>> up ['date_diff'] = np.busday_count( up.order_date.values.astype('datetime64 [D]'), up.date_done.values.astype('datetime64 [D]' ),holidays = cal) 錯誤:無法將對象轉換爲NumPy日期時間 –

+0

而「cal」是日曆對象。 –