2016-09-23 11 views
1

두 팬더 DatetimeIndex 사이의 일 차이를 찾는 팬더 관용적 방법이 있습니까?두 팬 사이의 요소 간 차이 차이 DatetimeIndex

>>> d1 = pd.to_datetime(['2000-01-01', '2000-01-02']) 
>>> d2 = pd.to_datetime(['2001-01-01', '2001-01-02']) 

- 연산자 차이, 즉 D1의 날짜가 아니라 D2로 설정된다.

IMO, 이것은 numpy 및 순수한 python 동작과 일치하지 않습니다. 팬더 자체가 아닙니다.

>>> d2[0]-d1[0] 
Timedelta('366 days 00:00:00') 

이것은 내가 원하는 것이지만 추한 것입니다.

>>> [d.days for d in d2.to_pydatetime() - d1.to_pydatetime()] 
[366, 366] 
+0

'd1-d2'는'd2-d1'이어야합니다 ?? – danio

답변

1

직접 np.subtract 사용 결과로 당신에게 TimedeltaIndex를 제공 Which'll

np.subtract(d2, d1) 

:

다음
TimedeltaIndex(['366 days', '366 days'], dtype='timedelta64[ns]', freq=None) 

그에 .days를 사용하려는 경우.

또 다른 가능한 방법 :

pd.to_timedelta(d2.values - d1.values).days 

당신을 떠나 Which'll :

dtypedatetimeIndex 때문에 산술 연산을 설정 현명 디자인으로, 당신이를 구성하는 경우이기 때문이다
array([366, 366]) 
+0

또는'(d2.values ​​- d1.values) .astype ('timedelta64 [D]') – danio

1

Series을 입력하면 원하는대로 요소 별 빼기를 수행 할 수 있습니다.

In [349]: 
d1 = pd.to_datetime(['2000-01-01', '2000-01-02']) 
d2 = pd.to_datetime(['2001-01-01', '2001-01-02']) 
s1 = pd.Series(d1) 
s2 = pd.Series(d2) 
(s1-s2).abs() 

Out[349]: 
0 366 days 
1 366 days 
dtype: timedelta64[ns] 
+0

감사합니다. 하지만 Jon의'np.subtract (d2, d1)'이 당신이 제 시간에 그를 이길지라도 더 좋다고 동의하길 바란다. – jf328

+1

@ jf328 이것은 설계 상으로는 문제가 아니고 버그가 아니라는 것을 이해하는 것이 유용하다고 생각합니다. to_datetime에서 반환 된 유형은 datetimeIndex이므로 산술 연산이 설정 방식이므로 Series, DataFrames, panels 등은 행렬처럼 동작합니다 – EdChum