2017-02-16 81 views
1

我遇到了一些奇怪的行爲,試圖通過ID將熊貓數據框的行分組,然後選擇max/min datetimes(w/timezones)。這是大熊貓0.18.1和numpy 1.11.1(我在前面的帖子中看到類似的問題顯然是固定的w /熊貓0.15)。奇怪的時區行爲在大熊貓中使用groupby/agg

具體來說,如果我嘗試:

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

我得到:

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] 

當原始數據有接近上午8點(美國/東)次。換句話說,即使它表示它是東部時間,並且具有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

看起來像一個錯誤,你可以檢查,如果這已經在https://github.com/pandas-已報告開發/熊貓/問題,如果不是,發佈一個新問題 – 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