|
13 | 13 | CategoricalIndex,
|
14 | 14 | DataFrame,
|
15 | 15 | Float64Index,
|
16 |
| - IndexSlice, |
17 | 16 | Int64Index,
|
18 | 17 | IntervalIndex,
|
19 | 18 | MultiIndex,
|
@@ -200,28 +199,69 @@ def time_take(self, index):
|
200 | 199 |
|
201 | 200 |
|
202 | 201 | class MultiIndexing:
|
203 |
| - def setup(self): |
204 |
| - mi = MultiIndex.from_product([range(1000), range(1000)]) |
205 |
| - self.s = Series(np.random.randn(1000000), index=mi) |
206 |
| - self.df = DataFrame(self.s) |
207 | 202 |
|
208 |
| - n = 100000 |
209 |
| - with warnings.catch_warnings(record=True): |
210 |
| - self.mdt = DataFrame( |
211 |
| - { |
212 |
| - "A": np.random.choice(range(10000, 45000, 1000), n), |
213 |
| - "B": np.random.choice(range(10, 400), n), |
214 |
| - "C": np.random.choice(range(1, 150), n), |
215 |
| - "D": np.random.choice(range(10000, 45000), n), |
216 |
| - "x": np.random.choice(range(400), n), |
217 |
| - "y": np.random.choice(range(25), n), |
218 |
| - } |
219 |
| - ) |
220 |
| - self.idx = IndexSlice[20000:30000, 20:30, 35:45, 30000:40000] |
221 |
| - self.mdt = self.mdt.set_index(["A", "B", "C", "D"]).sort_index() |
| 203 | + params = [True, False] |
| 204 | + param_names = ["unique_levels"] |
| 205 | + |
| 206 | + def setup(self, unique_levels): |
| 207 | + self.ndim = 2 |
| 208 | + if unique_levels: |
| 209 | + mi = MultiIndex.from_arrays([range(1000000)] * self.ndim) |
| 210 | + else: |
| 211 | + mi = MultiIndex.from_product([range(1000)] * self.ndim) |
| 212 | + self.df = DataFrame(np.random.randn(len(mi)), index=mi) |
| 213 | + |
| 214 | + self.tgt_slice = slice(200, 800) |
| 215 | + self.tgt_null_slice = slice(None) |
| 216 | + self.tgt_list = list(range(0, 1000, 10)) |
| 217 | + self.tgt_scalar = 500 |
| 218 | + |
| 219 | + bool_indexer = np.zeros(len(mi), dtype=np.bool_) |
| 220 | + bool_indexer[slice(0, len(mi), 100)] = True |
| 221 | + self.tgt_bool_indexer = bool_indexer |
| 222 | + |
| 223 | + def time_loc_partial_key_slice(self, unique_levels): |
| 224 | + self.df.loc[self.tgt_slice, :] |
| 225 | + |
| 226 | + def time_loc_partial_key_null_slice(self, unique_levels): |
| 227 | + self.df.loc[self.tgt_null_slice, :] |
| 228 | + |
| 229 | + def time_loc_partial_key_list(self, unique_levels): |
| 230 | + self.df.loc[self.tgt_list, :] |
| 231 | + |
| 232 | + def time_loc_partial_key_scalar(self, unique_levels): |
| 233 | + self.df.loc[self.tgt_scalar, :] |
| 234 | + |
| 235 | + def time_loc_partial_bool_indexer(self, unique_levels): |
| 236 | + self.df.loc[self.tgt_bool_indexer, :] |
| 237 | + |
| 238 | + def time_loc_all_slices(self, unique_levels): |
| 239 | + target = tuple([self.tgt_slice] * self.ndim) |
| 240 | + self.df.loc[target, :] |
| 241 | + |
| 242 | + def time_loc_all_null_slices(self, unique_levels): |
| 243 | + target = tuple([self.tgt_null_slice] * self.ndim) |
| 244 | + self.df.loc[target, :] |
| 245 | + |
| 246 | + def time_loc_all_lists(self, unique_levels): |
| 247 | + target = tuple([self.tgt_list] * self.ndim) |
| 248 | + self.df.loc[target, :] |
| 249 | + |
| 250 | + def time_loc_all_scalars(self, unique_levels): |
| 251 | + target = tuple([self.tgt_scalar] * self.ndim) |
| 252 | + self.df.loc[target, :] |
| 253 | + |
| 254 | + def time_loc_all_bool_indexers(self, unique_levels): |
| 255 | + target = tuple([self.tgt_bool_indexer] * self.ndim) |
| 256 | + self.df.loc[target, :] |
| 257 | + |
| 258 | + def time_loc_slice_plus_null_slice(self, unique_levels): |
| 259 | + target = (self.tgt_slice, self.tgt_null_slice) |
| 260 | + self.df.loc[target, :] |
222 | 261 |
|
223 |
| - def time_index_slice(self): |
224 |
| - self.mdt.loc[self.idx, :] |
| 262 | + def time_loc_null_slice_plus_slice(self, unique_levels): |
| 263 | + target = (self.tgt_null_slice, self.tgt_slice) |
| 264 | + self.df.loc[target, :] |
225 | 265 |
|
226 | 266 |
|
227 | 267 | class IntervalIndexing:
|
|
0 commit comments