@@ -378,21 +378,94 @@ def test_rank_modify_inplace(self):
378
378
assert_series_equal (result , expected )
379
379
380
380
381
+ # GH15630, pct should be on 100% basis when method='dense'
382
+
381
383
@pytest .mark .parametrize ('dtype' , ['O' , 'f8' , 'i8' ])
382
384
@pytest .mark .parametrize ('ser, exp' , [
383
385
([1 ], [1. ]),
384
- ([2 ], [1. ]),
385
- ([0 ], [1. ]),
386
+ ([1 , 2 ], [1. / 2 , 2. / 2 ]),
386
387
([2 , 2 ], [1. , 1. ]),
387
388
([1 , 2 , 3 ], [1. / 3 , 2. / 3 , 3. / 3 ]),
389
+ ([1 , 2 , 2 ], [1. / 2 , 2. / 2 , 2. / 2 ]),
388
390
([4 , 2 , 1 ], [3. / 3 , 2. / 3 , 1. / 3 ],),
389
391
([1 , 1 , 5 , 5 , 3 ], [1. / 3 , 1. / 3 , 3. / 3 , 3. / 3 , 2. / 3 ]),
392
+ ([1 , 1 , 3 , 3 , 5 , 5 ], [1. / 3 , 1. / 3 , 2. / 3 , 2. / 3 , 3. / 3 , 3. / 3 ]),
390
393
([- 5 , - 4 , - 3 , - 2 , - 1 ], [1. / 5 , 2. / 5 , 3. / 5 , 4. / 5 , 5. / 5 ])])
391
- def test_rank_pct (dtype , ser , exp ):
392
- # GH15630, pct should be on 100% basis even when method='dense'
393
- # TODO: add other methods (i.e. 'average', 'min', 'max', 'first')
394
-
394
+ def test_rank_dense_pct (dtype , ser , exp ):
395
395
s = Series (ser ).astype (dtype )
396
396
result = s .rank (method = 'dense' , pct = True )
397
397
expected = Series (exp ).astype (result .dtype )
398
398
assert_series_equal (result , expected )
399
+
400
+
401
+ @pytest .mark .parametrize ('dtype' , ['O' , 'f8' , 'i8' ])
402
+ @pytest .mark .parametrize ('ser, exp' , [
403
+ ([1 ], [1. ]),
404
+ ([1 , 2 ], [1. / 2 , 2. / 2 ]),
405
+ ([2 , 2 ], [1. / 2 , 1. / 2 ]),
406
+ ([1 , 2 , 3 ], [1. / 3 , 2. / 3 , 3. / 3 ]),
407
+ ([1 , 2 , 2 ], [1. / 3 , 2. / 3 , 2. / 3 ]),
408
+ ([4 , 2 , 1 ], [3. / 3 , 2. / 3 , 1. / 3 ],),
409
+ ([1 , 1 , 5 , 5 , 3 ], [1. / 5 , 1. / 5 , 4. / 5 , 4. / 5 , 3. / 5 ]),
410
+ ([1 , 1 , 3 , 3 , 5 , 5 ], [1. / 6 , 1. / 6 , 3. / 6 , 3. / 6 , 5. / 6 , 5. / 6 ]),
411
+ ([- 5 , - 4 , - 3 , - 2 , - 1 ], [1. / 5 , 2. / 5 , 3. / 5 , 4. / 5 , 5. / 5 ])])
412
+ def test_rank_min_pct (dtype , ser , exp ):
413
+ s = Series (ser ).astype (dtype )
414
+ result = s .rank (method = 'min' , pct = True )
415
+ expected = Series (exp ).astype (result .dtype )
416
+ assert_series_equal (result , expected )
417
+
418
+
419
+ @pytest .mark .parametrize ('dtype' , ['O' , 'f8' , 'i8' ])
420
+ @pytest .mark .parametrize ('ser, exp' , [
421
+ ([1 ], [1. ]),
422
+ ([1 , 2 ], [1. / 2 , 2. / 2 ]),
423
+ ([2 , 2 ], [1. , 1. ]),
424
+ ([1 , 2 , 3 ], [1. / 3 , 2. / 3 , 3. / 3 ]),
425
+ ([1 , 2 , 2 ], [1. / 3 , 3. / 3 , 3. / 3 ]),
426
+ ([4 , 2 , 1 ], [3. / 3 , 2. / 3 , 1. / 3 ],),
427
+ ([1 , 1 , 5 , 5 , 3 ], [2. / 5 , 2. / 5 , 5. / 5 , 5. / 5 , 3. / 5 ]),
428
+ ([1 , 1 , 3 , 3 , 5 , 5 ], [2. / 6 , 2. / 6 , 4. / 6 , 4. / 6 , 6. / 6 , 6. / 6 ]),
429
+ ([- 5 , - 4 , - 3 , - 2 , - 1 ], [1. / 5 , 2. / 5 , 3. / 5 , 4. / 5 , 5. / 5 ])])
430
+ def test_rank_max_pct (dtype , ser , exp ):
431
+ s = Series (ser ).astype (dtype )
432
+ result = s .rank (method = 'max' , pct = True )
433
+ expected = Series (exp ).astype (result .dtype )
434
+ assert_series_equal (result , expected )
435
+
436
+
437
+ @pytest .mark .parametrize ('dtype' , ['O' , 'f8' , 'i8' ])
438
+ @pytest .mark .parametrize ('ser, exp' , [
439
+ ([1 ], [1. ]),
440
+ ([1 , 2 ], [1. / 2 , 2. / 2 ]),
441
+ ([2 , 2 ], [1.5 / 2 , 1.5 / 2 ]),
442
+ ([1 , 2 , 3 ], [1. / 3 , 2. / 3 , 3. / 3 ]),
443
+ ([1 , 2 , 2 ], [1. / 3 , 2.5 / 3 , 2.5 / 3 ]),
444
+ ([4 , 2 , 1 ], [3. / 3 , 2. / 3 , 1. / 3 ],),
445
+ ([1 , 1 , 5 , 5 , 3 ], [1.5 / 5 , 1.5 / 5 , 4.5 / 5 , 4.5 / 5 , 3. / 5 ]),
446
+ ([1 , 1 , 3 , 3 , 5 , 5 ],
447
+ [1.5 / 6 , 1.5 / 6 , 3.5 / 6 , 3.5 / 6 , 5.5 / 6 , 5.5 / 6 ]),
448
+ ([- 5 , - 4 , - 3 , - 2 , - 1 ], [1. / 5 , 2. / 5 , 3. / 5 , 4. / 5 , 5. / 5 ])])
449
+ def test_rank_average_pct (dtype , ser , exp ):
450
+ s = Series (ser ).astype (dtype )
451
+ result = s .rank (method = 'average' , pct = True )
452
+ expected = Series (exp ).astype (result .dtype )
453
+ assert_series_equal (result , expected )
454
+
455
+
456
+ @pytest .mark .parametrize ('dtype' , ['f8' , 'i8' ])
457
+ @pytest .mark .parametrize ('ser, exp' , [
458
+ ([1 ], [1. ]),
459
+ ([1 , 2 ], [1. / 2 , 2. / 2 ]),
460
+ ([2 , 2 ], [1. / 2 , 2. / 2. ]),
461
+ ([1 , 2 , 3 ], [1. / 3 , 2. / 3 , 3. / 3 ]),
462
+ ([1 , 2 , 2 ], [1. / 3 , 2. / 3 , 3. / 3 ]),
463
+ ([4 , 2 , 1 ], [3. / 3 , 2. / 3 , 1. / 3 ],),
464
+ ([1 , 1 , 5 , 5 , 3 ], [1. / 5 , 2. / 5 , 4. / 5 , 5. / 5 , 3. / 5 ]),
465
+ ([1 , 1 , 3 , 3 , 5 , 5 ], [1. / 6 , 2. / 6 , 3. / 6 , 4. / 6 , 5. / 6 , 6. / 6 ]),
466
+ ([- 5 , - 4 , - 3 , - 2 , - 1 ], [1. / 5 , 2. / 5 , 3. / 5 , 4. / 5 , 5. / 5 ])])
467
+ def test_rank_first_pct (dtype , ser , exp ):
468
+ s = Series (ser ).astype (dtype )
469
+ result = s .rank (method = 'first' , pct = True )
470
+ expected = Series (exp ).astype (result .dtype )
471
+ assert_series_equal (result , expected )
0 commit comments