2016-04-12 5 views
5

の計算時間差私は、私が2倍の時間差を計算することができDateTimeIndexDateTimeIndex

import pandas as pd 
p = pd.DatetimeIndex(['1985-11-14', '1985-11-28', '1985-12-14', '1985-12-28'], dtype='datetime64[ns]') 

に時間差を計算したい:

p[1] - p[0] 

Timedelta('14 days 00:00:00') 
を与えます

しかし、p [1:] - p [: - 1]は機能しません。

DatetimeIndex(['1985-12-28'], dtype='datetime64[ns]', freq=None) 

と今後の警告:

FutureWarning: using '-' to provide set differences with datetimelike Indexes is deprecated, use .difference() 

私は(簡単に)DateTimeIndexでの値の間の時間差を計算することができますどのように方法上の任意の考え?そして、なぜそれは1つの値では動作しますが、DateTimeIndex全体では機能しませんか?

答えて

4

to_series()を用いSeriesDatetimeIndexを変換し、列間の差異を計算するdiffを呼び出す:

In [5]: 
p.to_series().diff() 

Out[5]: 
1985-11-14  NaT 
1985-11-28 14 days 
1985-12-14 16 days 
1985-12-28 14 days 
dtype: timedelta64[ns] 

なぜ失敗したのかについては、ここでは-演算子が異なるインデックス範囲の差集合または差集合を実行しようとしていますが、diffがある範囲で値を減算しようとしています。あなたがやった

p[1]からp[0]-はスカラー減算を実行しているが、あなたは、インデックス上でこれを行うとき、それはあなたが

+0

を私は、これは完全な答えと最も簡単な解決策だと思います。あなたの助けに感謝します。 –

0

-オペレーターが働いています。期待したことをしていないだけです。 2つの日時率の差を与えるために行動している第2の状況では、それはp[1:]にある値であるが、p[:-1]

であり、より良い解決策かもしれないが、それは動作要素賢明を実行するために働くだろうではありません:

[e - k for e,k in zip(p[1:], p[:-1])] 
0

は、私が最初の差分値を埋めるためにNoneを使用し、設定された操作を実行していると考えているが、私はあなたがその事件にどのように対処したいかを理解することができると確信しています。ところで

>>> [None] + [p[n] - p[n-1] for n in range(1, len(p))] 
[None, 
Timedelta('14 days 00:00:00'), 
Timedelta('16 days 00:00:00'), 
Timedelta('14 days 00:00:00')] 

、ちょうど日差取得する:

[None] + [(p[n] - p[n-1]).days for n in range(1, len(p))] 
[None, 14, 16, 14] 
関連する問題