| 136 | float_string_frame.rank(axis=1) |
| 137 | |
| 138 | def test_rank_na_option(self, float_frame): |
| 139 | sp_stats = pytest.importorskip("scipy.stats") |
| 140 | |
| 141 | float_frame.loc[::2, "A"] = np.nan |
| 142 | float_frame.loc[::3, "B"] = np.nan |
| 143 | float_frame.loc[::4, "C"] = np.nan |
| 144 | float_frame.loc[::5, "D"] = np.nan |
| 145 | |
| 146 | # bottom |
| 147 | ranks0 = float_frame.rank(na_option="bottom") |
| 148 | ranks1 = float_frame.rank(1, na_option="bottom") |
| 149 | |
| 150 | fvals = float_frame.fillna(np.inf).values |
| 151 | |
| 152 | exp0 = np.apply_along_axis(sp_stats.rankdata, 0, fvals) |
| 153 | exp1 = np.apply_along_axis(sp_stats.rankdata, 1, fvals) |
| 154 | |
| 155 | tm.assert_almost_equal(ranks0.values, exp0) |
| 156 | tm.assert_almost_equal(ranks1.values, exp1) |
| 157 | |
| 158 | # top |
| 159 | ranks0 = float_frame.rank(na_option="top") |
| 160 | ranks1 = float_frame.rank(1, na_option="top") |
| 161 | |
| 162 | fval0 = float_frame.fillna((float_frame.min() - 1).to_dict()).values |
| 163 | fval1 = float_frame.T |
| 164 | fval1 = fval1.fillna((fval1.min() - 1).to_dict()).T |
| 165 | fval1 = fval1.fillna(np.inf).values |
| 166 | |
| 167 | exp0 = np.apply_along_axis(sp_stats.rankdata, 0, fval0) |
| 168 | exp1 = np.apply_along_axis(sp_stats.rankdata, 1, fval1) |
| 169 | |
| 170 | tm.assert_almost_equal(ranks0.values, exp0) |
| 171 | tm.assert_almost_equal(ranks1.values, exp1) |
| 172 | |
| 173 | # descending |
| 174 | |
| 175 | # bottom |
| 176 | ranks0 = float_frame.rank(na_option="top", ascending=False) |
| 177 | ranks1 = float_frame.rank(1, na_option="top", ascending=False) |
| 178 | |
| 179 | fvals = float_frame.fillna(np.inf).values |
| 180 | |
| 181 | exp0 = np.apply_along_axis(sp_stats.rankdata, 0, -fvals) |
| 182 | exp1 = np.apply_along_axis(sp_stats.rankdata, 1, -fvals) |
| 183 | |
| 184 | tm.assert_almost_equal(ranks0.values, exp0) |
| 185 | tm.assert_almost_equal(ranks1.values, exp1) |
| 186 | |
| 187 | # descending |
| 188 | |
| 189 | # top |
| 190 | ranks0 = float_frame.rank(na_option="bottom", ascending=False) |
| 191 | ranks1 = float_frame.rank(1, na_option="bottom", ascending=False) |
| 192 | |
| 193 | fval0 = float_frame.fillna((float_frame.min() - 1).to_dict()).values |
| 194 | fval1 = float_frame.T |
| 195 | fval1 = fval1.fillna((fval1.min() - 1).to_dict()).T |