@@ -1381,97 +1381,6 @@ def test_is_monotonic(self):
1381
1381
self .assertFalse (s .is_monotonic )
1382
1382
self .assertTrue (s .is_monotonic_decreasing )
1383
1383
1384
- def test_nsmallest_nlargest (self ):
1385
- # float, int, datetime64 (use i8), timedelts64 (same),
1386
- # object that are numbers, object that are strings
1387
-
1388
- base = [3 , 2 , 1 , 2 , 5 ]
1389
-
1390
- s_list = [
1391
- Series (base , dtype = 'int8' ),
1392
- Series (base , dtype = 'int16' ),
1393
- Series (base , dtype = 'int32' ),
1394
- Series (base , dtype = 'int64' ),
1395
- Series (base , dtype = 'float32' ),
1396
- Series (base , dtype = 'float64' ),
1397
- Series (base , dtype = 'uint8' ),
1398
- Series (base , dtype = 'uint16' ),
1399
- Series (base , dtype = 'uint32' ),
1400
- Series (base , dtype = 'uint64' ),
1401
- Series (base ).astype ('timedelta64[ns]' ),
1402
- Series (pd .to_datetime (['2003' , '2002' , '2001' , '2002' , '2005' ])),
1403
- ]
1404
-
1405
- raising = [
1406
- Series ([3. , 2 , 1 , 2 , '5' ], dtype = 'object' ),
1407
- Series ([3. , 2 , 1 , 2 , 5 ], dtype = 'object' ),
1408
- # not supported on some archs
1409
- # Series([3., 2, 1, 2, 5], dtype='complex256'),
1410
- Series ([3. , 2 , 1 , 2 , 5 ], dtype = 'complex128' ),
1411
- ]
1412
-
1413
- for r in raising :
1414
- dt = r .dtype
1415
- msg = "Cannot use method 'n(larg|small)est' with dtype %s" % dt
1416
- args = 2 , len (r ), 0 , - 1
1417
- methods = r .nlargest , r .nsmallest
1418
- for method , arg in product (methods , args ):
1419
- with tm .assertRaisesRegexp (TypeError , msg ):
1420
- method (arg )
1421
-
1422
- for s in s_list :
1423
-
1424
- assert_series_equal (s .nsmallest (2 ), s .iloc [[2 , 1 ]])
1425
- assert_series_equal (s .nsmallest (2 , keep = 'last' ), s .iloc [[2 , 3 ]])
1426
-
1427
- empty = s .iloc [0 :0 ]
1428
- assert_series_equal (s .nsmallest (0 ), empty )
1429
- assert_series_equal (s .nsmallest (- 1 ), empty )
1430
- assert_series_equal (s .nlargest (0 ), empty )
1431
- assert_series_equal (s .nlargest (- 1 ), empty )
1432
-
1433
- assert_series_equal (s .nsmallest (len (s )), s .sort_values ())
1434
- assert_series_equal (s .nsmallest (len (s ) + 1 ), s .sort_values ())
1435
- assert_series_equal (s .nlargest (len (s )), s .iloc [[4 , 0 , 1 , 3 , 2 ]])
1436
- assert_series_equal (s .nlargest (len (s ) + 1 ),
1437
- s .iloc [[4 , 0 , 1 , 3 , 2 ]])
1438
-
1439
- s = Series ([3. , np .nan , 1 , 2 , 5 ])
1440
- assert_series_equal (s .nlargest (), s .iloc [[4 , 0 , 3 , 2 ]])
1441
- assert_series_equal (s .nsmallest (), s .iloc [[2 , 3 , 0 , 4 ]])
1442
-
1443
- msg = 'keep must be either "first", "last"'
1444
- with tm .assertRaisesRegexp (ValueError , msg ):
1445
- s .nsmallest (keep = 'invalid' )
1446
- with tm .assertRaisesRegexp (ValueError , msg ):
1447
- s .nlargest (keep = 'invalid' )
1448
-
1449
- # GH 13412
1450
- s = Series ([1 , 4 , 3 , 2 ], index = [0 , 0 , 1 , 1 ])
1451
- result = s .nlargest (3 )
1452
- expected = s .sort_values (ascending = False ).head (3 )
1453
- assert_series_equal (result , expected )
1454
- result = s .nsmallest (3 )
1455
- expected = s .sort_values ().head (3 )
1456
- assert_series_equal (result , expected )
1457
-
1458
- # GH 15297
1459
- s = Series ([1 ] * 5 , index = [1 , 2 , 3 , 4 , 5 ])
1460
- expected_first = Series ([1 ] * 3 , index = [1 , 2 , 3 ])
1461
- expected_last = Series ([1 ] * 3 , index = [5 , 4 , 3 ])
1462
-
1463
- result = s .nsmallest (3 )
1464
- assert_series_equal (result , expected_first )
1465
-
1466
- result = s .nsmallest (3 , keep = 'last' )
1467
- assert_series_equal (result , expected_last )
1468
-
1469
- result = s .nlargest (3 )
1470
- assert_series_equal (result , expected_first )
1471
-
1472
- result = s .nlargest (3 , keep = 'last' )
1473
- assert_series_equal (result , expected_last )
1474
-
1475
1384
def test_sort_index_level (self ):
1476
1385
mi = MultiIndex .from_tuples ([[1 , 1 , 3 ], [1 , 1 , 1 ]], names = list ('ABC' ))
1477
1386
s = Series ([1 , 2 ], mi )
@@ -1746,3 +1655,100 @@ def test_value_counts_categorical_not_ordered(self):
1746
1655
index = exp_idx , name = 'xxx' )
1747
1656
tm .assert_series_equal (s .value_counts (normalize = True ), exp )
1748
1657
tm .assert_series_equal (idx .value_counts (normalize = True ), exp )
1658
+
1659
+
1660
+ base = [3 , 2 , 1 , 2 , 5 ]
1661
+
1662
+
1663
+ class TestNLargestNSmallest (object ):
1664
+
1665
+ @pytest .mark .parametrize (
1666
+ "r" , [Series ([3. , 2 , 1 , 2 , '5' ], dtype = 'object' ),
1667
+ Series ([3. , 2 , 1 , 2 , 5 ], dtype = 'object' ),
1668
+ # not supported on some archs
1669
+ # Series([3., 2, 1, 2, 5], dtype='complex256'),
1670
+ Series ([3. , 2 , 1 , 2 , 5 ], dtype = 'complex128' )])
1671
+ def test_error (self , r ):
1672
+ dt = r .dtype
1673
+ msg = "Cannot use method 'n(larg|small)est' with dtype %s" % dt
1674
+ args = 2 , len (r ), 0 , - 1
1675
+ methods = r .nlargest , r .nsmallest
1676
+ for method , arg in product (methods , args ):
1677
+ with tm .assertRaisesRegexp (TypeError , msg ):
1678
+ method (arg )
1679
+
1680
+ @pytest .mark .parametrize (
1681
+ "s" , [Series (base , dtype = 'int8' ),
1682
+ Series (base , dtype = 'int16' ),
1683
+ Series (base , dtype = 'int32' ),
1684
+ Series (base , dtype = 'int64' ),
1685
+ Series (base , dtype = 'float32' ),
1686
+ Series (base , dtype = 'float64' ),
1687
+ Series (base , dtype = 'uint8' ),
1688
+ Series (base , dtype = 'uint16' ),
1689
+ Series (base , dtype = 'uint32' ),
1690
+ Series (base , dtype = 'uint64' ),
1691
+ Series (base ).astype ('timedelta64[ns]' ),
1692
+ Series (pd .to_datetime (['2003' , '2002' ,
1693
+ '2001' , '2002' ,
1694
+ '2005' ]))])
1695
+ def test_nsmallest_nlargest (self , s ):
1696
+ # float, int, datetime64 (use i8), timedelts64 (same),
1697
+ # object that are numbers, object that are strings
1698
+
1699
+ assert_series_equal (s .nsmallest (2 ), s .iloc [[2 , 1 ]])
1700
+ assert_series_equal (s .nsmallest (2 , keep = 'last' ), s .iloc [[2 , 3 ]])
1701
+
1702
+ empty = s .iloc [0 :0 ]
1703
+ assert_series_equal (s .nsmallest (0 ), empty )
1704
+ assert_series_equal (s .nsmallest (- 1 ), empty )
1705
+ assert_series_equal (s .nlargest (0 ), empty )
1706
+ assert_series_equal (s .nlargest (- 1 ), empty )
1707
+
1708
+ assert_series_equal (s .nsmallest (len (s )), s .sort_values ())
1709
+ assert_series_equal (s .nsmallest (len (s ) + 1 ), s .sort_values ())
1710
+ assert_series_equal (s .nlargest (len (s )), s .iloc [[4 , 0 , 1 , 3 , 2 ]])
1711
+ assert_series_equal (s .nlargest (len (s ) + 1 ),
1712
+ s .iloc [[4 , 0 , 1 , 3 , 2 ]])
1713
+
1714
+ def test_misc (self ):
1715
+
1716
+ s = Series ([3. , np .nan , 1 , 2 , 5 ])
1717
+ assert_series_equal (s .nlargest (), s .iloc [[4 , 0 , 3 , 2 ]])
1718
+ assert_series_equal (s .nsmallest (), s .iloc [[2 , 3 , 0 , 4 ]])
1719
+
1720
+ msg = 'keep must be either "first", "last"'
1721
+ with tm .assertRaisesRegexp (ValueError , msg ):
1722
+ s .nsmallest (keep = 'invalid' )
1723
+ with tm .assertRaisesRegexp (ValueError , msg ):
1724
+ s .nlargest (keep = 'invalid' )
1725
+
1726
+ # GH 15297
1727
+ s = Series ([1 ] * 5 , index = [1 , 2 , 3 , 4 , 5 ])
1728
+ expected_first = Series ([1 ] * 3 , index = [1 , 2 , 3 ])
1729
+ expected_last = Series ([1 ] * 3 , index = [5 , 4 , 3 ])
1730
+
1731
+ result = s .nsmallest (3 )
1732
+ assert_series_equal (result , expected_first )
1733
+
1734
+ result = s .nsmallest (3 , keep = 'last' )
1735
+ assert_series_equal (result , expected_last )
1736
+
1737
+ result = s .nlargest (3 )
1738
+ assert_series_equal (result , expected_first )
1739
+
1740
+ result = s .nlargest (3 , keep = 'last' )
1741
+ assert_series_equal (result , expected_last )
1742
+
1743
+ @pytest .mark .parametrize ('n' , range (1 , 5 ))
1744
+ def test_n (self , n ):
1745
+
1746
+ # GH 13412
1747
+ s = Series ([1 , 4 , 3 , 2 ], index = [0 , 0 , 1 , 1 ])
1748
+ result = s .nlargest (n )
1749
+ expected = s .sort_values (ascending = False ).head (n )
1750
+ assert_series_equal (result , expected )
1751
+
1752
+ result = s .nsmallest (n )
1753
+ expected = s .sort_values ().head (n )
1754
+ assert_series_equal (result , expected )
0 commit comments