2017-02-16 11 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] 

。この2番目の方法は大幅に遅く、2つの方法で同じ結果が得られると仮定しています。

+0

であるべきバグのように見え、これはhttps://github.com/pandas-に既に報告されている場合は、確認することができます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:

PRがmergedされている、と0.20.0

関連する問題