@@ -2900,6 +2900,38 @@ def test_groupby_groups_datetimeindex(self):
2900
2900
groups = grouped .groups
2901
2901
tm .assert_isinstance (list (groups .keys ())[0 ], datetime )
2902
2902
2903
+ def test_groupby_groups_datetimeindex_tz (self ):
2904
+ # GH 3950
2905
+ dates = ['2011-07-19 07:00:00' , '2011-07-19 08:00:00' , '2011-07-19 09:00:00' ,
2906
+ '2011-07-19 07:00:00' , '2011-07-19 08:00:00' , '2011-07-19 09:00:00' ]
2907
+ df = DataFrame ({'label' : ['a' , 'a' , 'a' , 'b' , 'b' , 'b' ],
2908
+ 'datetime' : dates , 'value1' : range (6 ), 'value2' : [1 , 2 ] * 3 })
2909
+ df ['datetime' ] = df ['datetime' ].apply (lambda d : Timestamp (d , tz = 'US/Pacific' ))
2910
+
2911
+ exp_idx1 = pd .DatetimeIndex (['2011-07-19 07:00:00' , '2011-07-19 07:00:00' ,
2912
+ '2011-07-19 08:00:00' , '2011-07-19 08:00:00' ,
2913
+ '2011-07-19 09:00:00' , '2011-07-19 09:00:00' ],
2914
+ tz = 'US/Pacific' , name = 'datetime' )
2915
+ exp_idx2 = Index (['a' , 'b' ] * 3 , name = 'label' )
2916
+ exp_idx = MultiIndex .from_arrays ([exp_idx1 , exp_idx2 ])
2917
+ expected = DataFrame ({'value1' : [0 , 3 , 1 , 4 , 2 , 5 ], 'value2' : [1 , 2 , 2 , 1 , 1 , 2 ]},
2918
+ index = exp_idx , columns = ['value1' , 'value2' ])
2919
+
2920
+ result = df .groupby (['datetime' , 'label' ]).sum ()
2921
+ assert_frame_equal (result , expected )
2922
+
2923
+ # by level
2924
+ didx = pd .DatetimeIndex (dates , tz = 'Asia/Tokyo' )
2925
+ df = DataFrame ({'value1' : range (6 ), 'value2' : [1 , 2 , 3 , 1 , 2 , 3 ]}, index = didx )
2926
+
2927
+ exp_idx = pd .DatetimeIndex (['2011-07-19 07:00:00' , '2011-07-19 08:00:00' ,
2928
+ '2011-07-19 09:00:00' ], tz = 'Asia/Tokyo' )
2929
+ expected = DataFrame ({'value1' : [3 , 5 , 7 ], 'value2' : [2 , 4 , 6 ]},
2930
+ index = exp_idx , columns = ['value1' , 'value2' ])
2931
+
2932
+ result = df .groupby (level = 0 ).sum ()
2933
+ assert_frame_equal (result , expected )
2934
+
2903
2935
def test_groupby_reindex_inside_function (self ):
2904
2936
from pandas .tseries .api import DatetimeIndex
2905
2937
0 commit comments