@@ -607,6 +607,51 @@ def test_nlargest():
607607 tm .assert_series_equal (gb .nlargest (3 , keep = "last" ), e )
608608
609609
610+ def test_nlargest_mi_grouper ():
611+ # see gh-21411
612+ npr = np .random .RandomState (123456789 )
613+
614+ dts = date_range ("20180101" , periods = 10 )
615+ iterables = [dts , ["one" , "two" ]]
616+
617+ idx = MultiIndex .from_product (iterables , names = ["first" , "second" ])
618+ s = Series (npr .randn (20 ), index = idx )
619+
620+ result = s .groupby ("first" ).nlargest (1 )
621+
622+ exp_idx = MultiIndex .from_tuples (
623+ [
624+ (dts [0 ], dts [0 ], "one" ),
625+ (dts [1 ], dts [1 ], "one" ),
626+ (dts [2 ], dts [2 ], "one" ),
627+ (dts [3 ], dts [3 ], "two" ),
628+ (dts [4 ], dts [4 ], "one" ),
629+ (dts [5 ], dts [5 ], "one" ),
630+ (dts [6 ], dts [6 ], "one" ),
631+ (dts [7 ], dts [7 ], "one" ),
632+ (dts [8 ], dts [8 ], "two" ),
633+ (dts [9 ], dts [9 ], "one" ),
634+ ],
635+ names = ["first" , "first" , "second" ],
636+ )
637+
638+ exp_values = [
639+ 2.2129019979039612 ,
640+ 1.8417114045748335 ,
641+ 0.858963679564603 ,
642+ 1.3759151378258088 ,
643+ 0.9430284594687134 ,
644+ 0.5296914208183142 ,
645+ 0.8318045593815487 ,
646+ - 0.8476703342910327 ,
647+ 0.3804446884133735 ,
648+ - 0.8028845810770998 ,
649+ ]
650+
651+ expected = Series (exp_values , index = exp_idx )
652+ tm .assert_series_equal (result , expected , check_exact = False , check_less_precise = True )
653+
654+
610655def test_nsmallest ():
611656 a = Series ([1 , 3 , 5 , 7 , 2 , 9 , 0 , 4 , 6 , 10 ])
612657 b = Series (list ("a" * 5 + "b" * 5 ))
0 commit comments