@@ -607,6 +607,51 @@ def test_nlargest():
607
607
tm .assert_series_equal (gb .nlargest (3 , keep = "last" ), e )
608
608
609
609
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
+
610
655
def test_nsmallest ():
611
656
a = Series ([1 , 3 , 5 , 7 , 2 , 9 , 0 , 4 , 6 , 10 ])
612
657
b = Series (list ("a" * 5 + "b" * 5 ))
0 commit comments