2017-02-16 1 views
1

팬더 데이터 프레임의 행을 ID별로 그룹화 한 다음 max/min datetimes (시간대)를 선택하려고하면 이상한 행동이 나타납니다. 이것은 팬더 0.18.1과 numpy 1.11.1입니다 (이전 게시물에서 유사한 문제가 팬더 0.15로 수정 된 것으로 보았습니다). 내가하려고하면팬더에서 groupby/agg를 사용하는 이상한 시간대 동작

특히, :

print orders.groupby('OrderID')['start_time'].agg(np.min).iloc[:5] 

내가 얻을 : 원시 데이터 오전 8시 (미국/동부) 배 가까이했다

OrderID 
O161101XVS100000044 2016-11-01 12:03:12.920000-04:00 
O161101XVS100000047 2016-11-01 12:03:36.693000-04:00 
O161101XVS100000098 2016-11-01 12:09:08.330000-04:00 
O161101XVS100000122 2016-11-01 12:09:59.950000-04:00 
O161101XVS100000152 2016-11-01 12:11:29.790000-04:00 
Name: start_time, dtype: datetime64[ns, US/Eastern] 

. 즉, 동부 시간이라고 말하고 UTC-4 오프셋을 가지고 있다고해도 UTC 시간으로 되돌아갑니다.

하지만 대신하려고하는 경우 :

print orders.groupby('OrderID')['start_time'].agg(lambda x: np.min(x)).iloc[:5] 

을 지금 얻을 : 내가 의도 한 행동이

OrderID 
O161101XVS100000044 2016-11-01 08:03:12.920000-04:00 
O161101XVS100000047 2016-11-01 08:03:36.693000-04:00 
O161101XVS100000098 2016-11-01 08:09:08.330000-04:00 
O161101XVS100000122 2016-11-01 08:09:59.950000-04:00 
O161101XVS100000152 2016-11-01 08:11:29.790000-04:00 
Name: start_time, dtype: datetime64[ns, US/Eastern] 

합니다. 이 두 번째 방법은 매우 느리고 두 가지 방법으로 동일한 결과를 얻을 수 있다고 가정합니다.

+0

에 있어야 당신이 확인할 수 있습니다 버그처럼 보인다 dev/pandas/issues 및 그렇지 않은 경우, 새로운 호를 게시하십시오 – EdChum

답변

0

이 동작을 확인할 수 있습니다. 문제는 pandas/types/cast/_possibly_downcast_to_dtype()입니다. 계산은 i8으로 완료되고 이후에 다시 datetime을 인식하는 표준 시간대로 변환됩니다. 그러나이 라인 :

result = to_datetime(result).tz_localize(dtype.tz) 

이 될 필요가 :

result = to_datetime(result).tz_localize('utc') 
result = result.tz_convert(dtype.tz) 

업데이트 :

나는이 문제를 해결하기 위해 PR을 제출했다.

업데이트 2 :이 https://github.com/pandas-에 이미보고 된 경우

PR이 merged 왔으며, 0.20.0

관련 문제