2017-11-10 10 views
2

내 팬더 ​​dataframe에 두 개의 날짜 열, df이 다음팬더에서 날짜 계산 사이의 시간이 오래 걸리나요?

d = pd.DatetimeIndex(start='1700-01-01', end='2017-01-01', freq='1D') 
df = pd.DataFrame({'date1':d}) 
df['date2'] = df['date1'].sample(frac=1).values 

내가 사용이 날짜 사이의 주 수를 계산하고있다 : (11)와 dataframe에

df['weeks'] = (df['date1'].subtract(df['date2'])).dt.days/7

을 이 행은 예상보다 오래 걸립니다. 약 10 분이 소요됩니다.

더 빠른 방법이 있나요?

+0

... 당신이를 제공 할 수 질문 본문에서 데이터 행이 거의 없습니까? –

+0

@COLDSPEED가 추가 된 예 – user1566200

답변

2

사용 numpy - array의 모두에 열을 변환 빼고 마지막 변환 일 :

df['weeks'] = (df['date1'].values- df['date2'].values)/np.timedelta64(1, 'D')/7 

샘플 :

d = pd.DatetimeIndex(start='1700-01-01', end='2017-01-01', freq='1D') 
df = pd.DataFrame({'date1':d}) 
df['date2'] = df['date1'].sample(frac=1).values 
#print (df) 

In [292]: %timeit df['weeks'] = (df['date1'].subtract(df['date2'])).dt.days/7 
1 loop, best of 3: 942 ms per loop 

In [293]: %timeit df['weeks'] = (df['date1'].values- df['date2'].values)/np.timedelta64(1, 'D')/7 
1000 loops, best of 3: 1.89 ms per loop 
당신은 numba``사용을 고려할 수
+0

이것은 https://github.com/pandas-dev/pandas/issues/18092 문제입니다. – Jeff