2017-11-10 3 views
2

私はパンダのデータフレーム、dfに2つの日時の列があります。パンダの日付計算の時間がかかりますか?

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とデータフレームで

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

これは予想以上に長くなります(約10分)。

これを行うより速い方法がありますか?

+0

をあなたは 'numba'を使用して検討するかもしれない...あなたが提供することができますあなたの質問の本文にあなたのデータのいくつかの行? –

+0

@COLDSPEED追加例 – user1566200

答えて

2

使用numpy - 日に、array sの両方の列を変換減算し、最後の変換:

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 
+0

これはhttps://github.com/pandas-dev/pandas/issues/18092の問題です – Jeff

関連する問題