|
13 | 13 | CategoricalIndex,
|
14 | 14 | DataFrame,
|
15 | 15 | Float64Index,
|
16 |
| - IndexSlice, |
17 | 16 | Int64Index,
|
18 | 17 | IntervalIndex,
|
19 | 18 | MultiIndex,
|
@@ -200,28 +199,81 @@ 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.nlevels = 2 |
| 208 | + if unique_levels: |
| 209 | + mi = MultiIndex.from_arrays([range(1000000)] * self.nlevels) |
| 210 | + else: |
| 211 | + mi = MultiIndex.from_product([range(1000)] * self.nlevels) |
| 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_key_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.nlevels) |
| 240 | + self.df.loc[target, :] |
| 241 | + |
| 242 | + def time_loc_all_null_slices(self, unique_levels): |
| 243 | + target = tuple([self.tgt_null_slice] * self.nlevels) |
| 244 | + self.df.loc[target, :] |
| 245 | + |
| 246 | + def time_loc_all_lists(self, unique_levels): |
| 247 | + target = tuple([self.tgt_list] * self.nlevels) |
| 248 | + self.df.loc[target, :] |
222 | 249 |
|
223 |
| - def time_index_slice(self): |
224 |
| - self.mdt.loc[self.idx, :] |
| 250 | + def time_loc_all_scalars(self, unique_levels): |
| 251 | + target = tuple([self.tgt_scalar] * self.nlevels) |
| 252 | + self.df.loc[target, :] |
| 253 | + |
| 254 | + def time_loc_all_bool_indexers(self, unique_levels): |
| 255 | + target = tuple([self.tgt_bool_indexer] * self.nlevels) |
| 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, :] |
| 261 | + |
| 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, :] |
| 265 | + |
| 266 | + def time_xs_level_0(self, unique_levels): |
| 267 | + target = self.tgt_scalar |
| 268 | + self.df.xs(target, level=0) |
| 269 | + |
| 270 | + def time_xs_level_1(self, unique_levels): |
| 271 | + target = self.tgt_scalar |
| 272 | + self.df.xs(target, level=1) |
| 273 | + |
| 274 | + def time_xs_full_key(self, unique_levels): |
| 275 | + target = tuple([self.tgt_scalar] * self.nlevels) |
| 276 | + self.df.xs(target) |
225 | 277 |
|
226 | 278 |
|
227 | 279 | class IntervalIndexing:
|
@@ -257,6 +309,24 @@ def time_get_indexer_mismatched_tz(self):
|
257 | 309 | self.dti.get_indexer(self.dti2)
|
258 | 310 |
|
259 | 311 |
|
| 312 | +class SortedAndUnsortedDatetimeIndexLoc: |
| 313 | + def setup(self): |
| 314 | + dti = date_range("2016-01-01", periods=10000, tz="US/Pacific") |
| 315 | + index = np.array(dti) |
| 316 | + |
| 317 | + unsorted_index = index.copy() |
| 318 | + unsorted_index[10] = unsorted_index[20] |
| 319 | + |
| 320 | + self.df_unsorted = DataFrame(index=unsorted_index, data={"a": 1}) |
| 321 | + self.df_sort = DataFrame(index=index, data={"a": 1}) |
| 322 | + |
| 323 | + def time_loc_unsorted(self): |
| 324 | + self.df_unsorted.loc["2016-6-11"] |
| 325 | + |
| 326 | + def time_loc_sorted(self): |
| 327 | + self.df_sort.loc["2016-6-11"] |
| 328 | + |
| 329 | + |
260 | 330 | class CategoricalIndexIndexing:
|
261 | 331 |
|
262 | 332 | params = ["monotonic_incr", "monotonic_decr", "non_monotonic"]
|
|
0 commit comments