@@ -378,21 +378,94 @@ def test_rank_modify_inplace(self):
378378 assert_series_equal (result , expected )
379379
380380
381+ # GH15630, pct should be on 100% basis when method='dense'
382+
381383@pytest .mark .parametrize ('dtype' , ['O' , 'f8' , 'i8' ])
382384@pytest .mark .parametrize ('ser, exp' , [
383385 ([1 ], [1. ]),
384- ([2 ], [1. ]),
385- ([0 ], [1. ]),
386+ ([1 , 2 ], [1. / 2 , 2. / 2 ]),
386387 ([2 , 2 ], [1. , 1. ]),
387388 ([1 , 2 , 3 ], [1. / 3 , 2. / 3 , 3. / 3 ]),
389+ ([1 , 2 , 2 ], [1. / 2 , 2. / 2 , 2. / 2 ]),
388390 ([4 , 2 , 1 ], [3. / 3 , 2. / 3 , 1. / 3 ],),
389391 ([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 ]),
390393 ([- 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 ):
395395 s = Series (ser ).astype (dtype )
396396 result = s .rank (method = 'dense' , pct = True )
397397 expected = Series (exp ).astype (result .dtype )
398398 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