|
55 | 55 | import pandas.lib as lib
|
56 | 56 |
|
57 | 57 | from numpy.testing.decorators import slow
|
| 58 | +from pandas import _np_version_under1p9 |
58 | 59 |
|
59 | 60 | #---------------------------------------------------------------------
|
60 | 61 | # DataFrame test cases
|
@@ -13642,6 +13643,93 @@ def test_quantile_axis_parameter(self):
|
13642 | 13643 | self.assertRaises(ValueError, df.quantile, 0.1, axis=-1)
|
13643 | 13644 | self.assertRaises(ValueError, df.quantile, 0.1, axis="column")
|
13644 | 13645 |
|
| 13646 | + def test_quantile_interpolation(self): |
| 13647 | + # GH #10174 |
| 13648 | + if _np_version_under1p9: |
| 13649 | + raise nose.SkipTest("Numpy version under 1.9") |
| 13650 | + |
| 13651 | + from numpy import percentile |
| 13652 | + |
| 13653 | + #interpolation = linear (default case) |
| 13654 | + q = self.tsframe.quantile(0.1, axis=0,interpolation='linear') |
| 13655 | + self.assertEqual(q['A'], percentile(self.tsframe['A'], 10)) |
| 13656 | + q = self.intframe.quantile(0.1) |
| 13657 | + self.assertEqual(q['A'], percentile(self.intframe['A'], 10)) |
| 13658 | + |
| 13659 | + q1 = self.intframe.quantile(0.1) |
| 13660 | + self.assertEqual(q1['A'], np.percentile(self.intframe['A'], 10)) |
| 13661 | + #test with and without interpolation keyword |
| 13662 | + assert_series_equal(q,q1) |
| 13663 | + |
| 13664 | + #interpolation method other than default linear |
| 13665 | + |
| 13666 | + df = DataFrame({"A": [1, 2, 3], "B": [2, 3, 4]}, index=[1, 2, 3]) |
| 13667 | + result = df.quantile(.5, axis=1,interpolation='nearest') |
| 13668 | + expected = Series([1., 2., 3.], index=[1, 2, 3]) |
| 13669 | + assert_series_equal(result, expected) |
| 13670 | + |
| 13671 | + #axis |
| 13672 | + result = df.quantile([.5, .75], axis=1,interpolation='lower') |
| 13673 | + expected = DataFrame({1: [1., 1.], 2: [2., 2.], |
| 13674 | + 3: [3., 3.]}, index=[0.5, 0.75]) |
| 13675 | + assert_frame_equal(result, expected) |
| 13676 | + |
| 13677 | + #test degenerate case |
| 13678 | + df = DataFrame({'x': [], 'y': []}) |
| 13679 | + q = df.quantile(0.1, axis=0,interpolation='higher') |
| 13680 | + assert(np.isnan(q['x']) and np.isnan(q['y'])) |
| 13681 | + |
| 13682 | + #multi |
| 13683 | + df = DataFrame([[1, 1, 1], [2, 2, 2], [3, 3, 3]], |
| 13684 | + columns=['a', 'b', 'c']) |
| 13685 | + result = df.quantile([.25, .5],interpolation='midpoint') |
| 13686 | + expected = DataFrame([[1.5, 1.5, 1.5], [2.5, 2.5, 2.5]], |
| 13687 | + index=[.25, .5], columns=['a', 'b', 'c']) |
| 13688 | + assert_frame_equal(result, expected) |
| 13689 | + |
| 13690 | + |
| 13691 | + def test_quantile_interpolation_np_lt_1p9(self): |
| 13692 | + # GH #10174 |
| 13693 | + if not _np_version_under1p9: |
| 13694 | + raise nose.SkipTest("Numpy version is greater than 1.9") |
| 13695 | + |
| 13696 | + from numpy import percentile |
| 13697 | + |
| 13698 | + #interpolation = linear (default case) |
| 13699 | + q = self.tsframe.quantile(0.1, axis=0,interpolation='linear') |
| 13700 | + self.assertEqual(q['A'], percentile(self.tsframe['A'], 10)) |
| 13701 | + q = self.intframe.quantile(0.1) |
| 13702 | + self.assertEqual(q['A'], percentile(self.intframe['A'], 10)) |
| 13703 | + |
| 13704 | + q1 = self.intframe.quantile(0.1) |
| 13705 | + self.assertEqual(q1['A'], np.percentile(self.intframe['A'], 10)) |
| 13706 | + #test with and without interpolation keyword |
| 13707 | + assert_series_equal(q,q1) |
| 13708 | + |
| 13709 | + #interpolation method other than default linear |
| 13710 | + |
| 13711 | + expErrMsg = ("Interpolation methods other than linear" |
| 13712 | + " not supported in numpy < 1.9") |
| 13713 | + df = DataFrame({"A": [1, 2, 3], "B": [2, 3, 4]}, index=[1, 2, 3]) |
| 13714 | + with assertRaisesRegexp(ValueError,expErrMsg): |
| 13715 | + df.quantile(.5, axis=1,interpolation='nearest') |
| 13716 | + |
| 13717 | + with assertRaisesRegexp(ValueError,expErrMsg): |
| 13718 | + df.quantile([.5, .75], axis=1,interpolation='lower') |
| 13719 | + |
| 13720 | + # test degenerate case |
| 13721 | + df = DataFrame({'x': [], 'y': []}) |
| 13722 | + with assertRaisesRegexp(ValueError,expErrMsg): |
| 13723 | + q = df.quantile(0.1, axis=0,interpolation='higher') |
| 13724 | + |
| 13725 | + #multi |
| 13726 | + df = DataFrame([[1, 1, 1], [2, 2, 2], [3, 3, 3]], |
| 13727 | + columns=['a', 'b', 'c']) |
| 13728 | + with assertRaisesRegexp(ValueError,expErrMsg): |
| 13729 | + result = df.quantile([.25, .5],interpolation='midpoint') |
| 13730 | + |
| 13731 | + |
| 13732 | + |
13645 | 13733 | def test_quantile_multi(self):
|
13646 | 13734 | df = DataFrame([[1, 1, 1], [2, 2, 2], [3, 3, 3]],
|
13647 | 13735 | columns=['a', 'b', 'c'])
|
|
0 commit comments