@@ -3140,6 +3140,55 @@ def test_timegrouper_with_reg_groups(self):
31403140 result2 = df .groupby ([pd .TimeGrouper (freq = freq ), 'user_id' ])['whole_cost' ].sum ()
31413141 assert_series_equal (result2 , expected )
31423142
3143+ def test_timegrouper_get_group (self ):
3144+ # GH 6914
3145+
3146+ df_original = DataFrame ({
3147+ 'Buyer' : 'Carl Joe Joe Carl Joe Carl' .split (),
3148+ 'Quantity' : [18 ,3 ,5 ,1 ,9 ,3 ],
3149+ 'Date' : [datetime (2013 ,9 ,1 ,13 ,0 ), datetime (2013 ,9 ,1 ,13 ,5 ),
3150+ datetime (2013 ,10 ,1 ,20 ,0 ), datetime (2013 ,10 ,3 ,10 ,0 ),
3151+ datetime (2013 ,12 ,2 ,12 ,0 ), datetime (2013 ,9 ,2 ,14 ,0 ),]})
3152+ df_reordered = df_original .sort (columns = 'Quantity' )
3153+
3154+ # single grouping
3155+ expected_list = [df_original .iloc [[0 , 1 , 5 ]], df_original .iloc [[2 , 3 ]],
3156+ df_original .iloc [[4 ]]]
3157+ dt_list = ['2013-09-30' , '2013-10-31' , '2013-12-31' ]
3158+
3159+ for df in [df_original , df_reordered ]:
3160+ grouped = df .groupby (pd .Grouper (freq = 'M' , key = 'Date' ))
3161+ for t , expected in zip (dt_list , expected_list ):
3162+ dt = pd .Timestamp (t )
3163+ result = grouped .get_group (dt )
3164+ assert_frame_equal (result , expected )
3165+
3166+ # multiple grouping
3167+ expected_list = [df_original .iloc [[1 ]], df_original .iloc [[3 ]],
3168+ df_original .iloc [[4 ]]]
3169+ g_list = [('Joe' , '2013-09-30' ), ('Carl' , '2013-10-31' ), ('Joe' , '2013-12-31' )]
3170+
3171+ for df in [df_original , df_reordered ]:
3172+ grouped = df .groupby (['Buyer' , pd .Grouper (freq = 'M' , key = 'Date' )])
3173+ for (b , t ), expected in zip (g_list , expected_list ):
3174+ dt = pd .Timestamp (t )
3175+ result = grouped .get_group ((b , dt ))
3176+ assert_frame_equal (result , expected )
3177+
3178+ # with index
3179+ df_original = df_original .set_index ('Date' )
3180+ df_reordered = df_original .sort (columns = 'Quantity' )
3181+
3182+ expected_list = [df_original .iloc [[0 , 1 , 5 ]], df_original .iloc [[2 , 3 ]],
3183+ df_original .iloc [[4 ]]]
3184+
3185+ for df in [df_original , df_reordered ]:
3186+ grouped = df .groupby (pd .Grouper (freq = 'M' ))
3187+ for t , expected in zip (dt_list , expected_list ):
3188+ dt = pd .Timestamp (t )
3189+ result = grouped .get_group (dt )
3190+ assert_frame_equal (result , expected )
3191+
31433192 def test_cumcount (self ):
31443193 df = DataFrame ([['a' ], ['a' ], ['a' ], ['b' ], ['a' ]], columns = ['A' ])
31453194 g = df .groupby ('A' )
0 commit comments