@@ -2900,6 +2900,38 @@ def test_groupby_groups_datetimeindex(self):
29002900 groups = grouped .groups
29012901 tm .assert_isinstance (list (groups .keys ())[0 ], datetime )
29022902
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+
29032935 def test_groupby_reindex_inside_function (self ):
29042936 from pandas .tseries .api import DatetimeIndex
29052937
0 commit comments