Skip to content

PERF: performance regression in 1.0 compared to 0.25 #30790

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
2 of 4 tasks
jorisvandenbossche opened this issue Jan 7, 2020 · 27 comments
Closed
2 of 4 tasks

PERF: performance regression in 1.0 compared to 0.25 #30790

jorisvandenbossche opened this issue Jan 7, 2020 · 27 comments
Labels
Performance Memory or execution speed performance
Milestone

Comments

@jorisvandenbossche
Copy link
Member

jorisvandenbossche commented Jan 7, 2020

I ran a full benchmark on a separate machine locally, comparing current master against 0.25.3.

Some identified cases:

Full results:

       before           after         ratio
     [62a87bf4]       [526b2f36]
     <v0.25.3^0>       <benchmarks-run>
+      31.4±0.4ms          127±1ms     4.03  eval.Eval.time_chained_cmp('python', 'all')
+      41.7±0.4ms        129±0.9ms     3.08  eval.Eval.time_chained_cmp('python', 1)
+     12.5±0.04μs       37.1±0.2μs     2.98  indexing.NonNumericSeriesIndexing.time_getitem_scalar('string', 'non_monotonic')
+     14.8±0.07μs       38.3±0.6μs     2.59  indexing.NonNumericSeriesIndexing.time_getitem_scalar('string', 'unique_monotonic_inc')
+        87.8±8μs         220±20μs     2.50  indexing.NumericSeriesIndexing.time_getitem_scalar(<class 'pandas.core.indexes.numeric.Int64Index'>, 'nonunique_monotonic_inc')
+      58.4±0.2μs        142±0.3μs     2.43  ctors.SeriesDtypesConstructors.time_index_from_array_string
+         208±2μs          502±3μs     2.41  groupby.GroupByMethods.time_dtype_as_group('object', 'all', 'transformation')
+         208±1μs          497±2μs     2.39  groupby.GroupByMethods.time_dtype_as_group('object', 'all', 'direct')
+       210±0.7μs          499±7μs     2.38  groupby.GroupByMethods.time_dtype_as_group('object', 'any', 'transformation')
+         209±2μs          496±3μs     2.37  groupby.GroupByMethods.time_dtype_as_group('object', 'any', 'direct')
+         210±2μs          497±2μs     2.37  groupby.GroupByMethods.time_dtype_as_field('int', 'all', 'transformation')
+         213±2μs          504±6μs     2.37  groupby.GroupByMethods.time_dtype_as_field('float', 'all', 'transformation')
+      20.8±0.3μs       49.2±0.6μs     2.36  indexing.NonNumericSeriesIndexing.time_getitem_scalar('string', 'nonunique_monotonic_inc')
+         210±1μs          497±4μs     2.36  groupby.GroupByMethods.time_dtype_as_field('int', 'all', 'direct')
+         213±2μs          503±2μs     2.36  groupby.GroupByMethods.time_dtype_as_group('int', 'all', 'direct')
+         214±3μs          504±2μs     2.36  groupby.GroupByMethods.time_dtype_as_group('int', 'all', 'transformation')
+         213±2μs          500±3μs     2.35  groupby.GroupByMethods.time_dtype_as_field('float', 'all', 'direct')
+         218±2μs          513±2μs     2.35  groupby.GroupByMethods.time_dtype_as_group('float', 'all', 'direct')
+         215±1μs          505±2μs     2.35  groupby.GroupByMethods.time_dtype_as_group('int', 'any', 'direct')
+       213±0.9μs          499±3μs     2.34  groupby.GroupByMethods.time_dtype_as_field('int', 'any', 'transformation')
+         219±2μs          514±2μs     2.34  groupby.GroupByMethods.time_dtype_as_group('float', 'all', 'transformation')
+       215±0.9μs          504±3μs     2.34  groupby.GroupByMethods.time_dtype_as_group('int', 'any', 'transformation')
+         214±1μs          501±3μs     2.34  groupby.GroupByMethods.time_dtype_as_field('float', 'any', 'transformation')
+         219±1μs          512±2μs     2.33  groupby.GroupByMethods.time_dtype_as_group('float', 'any', 'transformation')
+         219±2μs          511±1μs     2.33  groupby.GroupByMethods.time_dtype_as_group('datetime', 'all', 'transformation')
+         213±2μs          497±3μs     2.33  groupby.GroupByMethods.time_dtype_as_field('int', 'any', 'direct')
+         220±2μs          514±2μs     2.33  groupby.GroupByMethods.time_dtype_as_group('datetime', 'any', 'direct')
+         220±2μs          513±3μs     2.33  groupby.GroupByMethods.time_dtype_as_group('float', 'any', 'direct')
+         221±2μs          512±4μs     2.32  groupby.GroupByMethods.time_dtype_as_group('datetime', 'any', 'transformation')
+         216±2μs          500±2μs     2.32  groupby.GroupByMethods.time_dtype_as_field('float', 'any', 'direct')
+         220±2μs          509±1μs     2.32  groupby.GroupByMethods.time_dtype_as_group('datetime', 'all', 'direct')
+         217±1μs          498±2μs     2.30  groupby.GroupByMethods.time_dtype_as_field('datetime', 'all', 'direct')
+         218±2μs          498±2μs     2.29  groupby.GroupByMethods.time_dtype_as_field('datetime', 'all', 'transformation')
+       219±0.5μs          497±1μs     2.27  groupby.GroupByMethods.time_dtype_as_field('datetime', 'any', 'direct')
+       218±0.6μs        496±0.9μs     2.27  groupby.GroupByMethods.time_dtype_as_field('datetime', 'any', 'transformation')
+         583±3ms          1.32±0s     2.27  groupby.Apply.time_copy_overhead_single_col
+       223±0.7μs        495±0.8μs     2.22  groupby.GroupByMethods.time_dtype_as_field('float', 'shift', 'direct')
+      1.47±0.01s       3.26±0.01s     2.21  groupby.Apply.time_copy_function_multi_col
+         223±1μs        494±0.6μs     2.21  groupby.GroupByMethods.time_dtype_as_field('float', 'shift', 'transformation')
+        28.2±2ms       62.2±0.4ms     2.21  frame_methods.Apply.time_apply_ref_by_name
+      7.63±0.2ms       16.8±0.1ms     2.20  timeseries.AsOf.time_asof('DataFrame')
+       228±0.9μs          494±1μs     2.17  groupby.GroupByMethods.time_dtype_as_group('object', 'shift', 'direct')
+       229±0.4μs          493±1μs     2.15  groupby.GroupByMethods.time_dtype_as_group('object', 'shift', 'transformation')
+         237±1μs        509±0.2μs     2.14  groupby.GroupByMethods.time_dtype_as_group('float', 'shift', 'direct')
+       238±0.4μs        509±0.6μs     2.14  groupby.GroupByMethods.time_dtype_as_group('float', 'shift', 'transformation')
+       231±0.9μs        493±0.8μs     2.14  groupby.GroupByMethods.time_dtype_as_field('datetime', 'shift', 'transformation')
+         234±5μs          500±1μs     2.14  groupby.GroupByMethods.time_dtype_as_group('datetime', 'shift', 'direct')
+       231±0.9μs        491±0.5μs     2.13  groupby.GroupByMethods.time_dtype_as_field('datetime', 'shift', 'direct')
+         236±3μs          499±2μs     2.12  groupby.GroupByMethods.time_dtype_as_group('datetime', 'shift', 'transformation')
+       250±0.4μs          511±1μs     2.05  groupby.GroupByMethods.time_dtype_as_field('int', 'shift', 'direct')
+       253±0.5μs          517±1μs     2.04  groupby.GroupByMethods.time_dtype_as_group('int', 'shift', 'transformation')
+       250±0.6μs        509±0.5μs     2.03  groupby.GroupByMethods.time_dtype_as_field('int', 'shift', 'transformation')
+         255±2μs          517±2μs     2.03  groupby.GroupByMethods.time_dtype_as_group('int', 'shift', 'direct')
+        2.16±0ms       4.32±0.3ms     2.00  rolling.Methods.time_rolling('DataFrame', 1000, 'int', 'sum')
+         285±3μs          566±7μs     1.99  groupby.GroupByMethods.time_dtype_as_field('datetime', 'last', 'transformation')
+     2.17±0.02ms       4.30±0.7ms     1.99  rolling.Methods.time_rolling('DataFrame', 10, 'int', 'sum')
+         285±3μs          564±2μs     1.97  groupby.GroupByMethods.time_dtype_as_field('datetime', 'last', 'direct')
+       296±0.9μs          577±3μs     1.94  groupby.GroupByMethods.time_dtype_as_field('datetime', 'first', 'transformation')
+      25.3±0.2μs       49.2±0.4μs     1.94  indexing.NumericSeriesIndexing.time_getitem_scalar(<class 'pandas.core.indexes.numeric.Int64Index'>, 'unique_monotonic_inc')
+     2.29±0.01ms       4.46±0.3ms     1.94  rolling.Methods.time_rolling('DataFrame', 1000, 'int', 'mean')
+         298±2μs          577±1μs     1.93  groupby.GroupByMethods.time_dtype_as_field('datetime', 'first', 'direct')
+     2.30±0.04ms       4.43±0.6ms     1.93  rolling.Methods.time_rolling('DataFrame', 10, 'int', 'mean')
+         285±1μs        545±0.4μs     1.91  groupby.GroupByMethods.time_dtype_as_group('object', 'bfill', 'direct')
+         285±1μs          544±2μs     1.91  groupby.GroupByMethods.time_dtype_as_group('object', 'ffill', 'direct')
+         285±1μs          544±1μs     1.91  groupby.GroupByMethods.time_dtype_as_group('object', 'bfill', 'transformation')
+       286±0.5μs        545±0.8μs     1.91  groupby.GroupByMethods.time_dtype_as_group('object', 'ffill', 'transformation')
+         290±1μs          552±2μs     1.90  groupby.GroupByMethods.time_dtype_as_group('datetime', 'ffill', 'transformation')
+         289±2μs          551±1μs     1.90  groupby.GroupByMethods.time_dtype_as_group('datetime', 'bfill', 'transformation')
+         289±3μs        548±0.8μs     1.90  groupby.GroupByMethods.time_dtype_as_group('datetime', 'bfill', 'direct')
+       290±0.6μs        549±0.6μs     1.90  groupby.GroupByMethods.time_dtype_as_group('datetime', 'ffill', 'direct')
+      2.96±0.2ms       5.50±0.4ms     1.86  rolling.ExpandingMethods.time_expanding('Series', 'int', 'sum')
+         312±3μs          572±1μs     1.83  groupby.GroupByMethods.time_dtype_as_field('datetime', 'max', 'transformation')
+         311±2μs          569±3μs     1.83  groupby.GroupByMethods.time_dtype_as_field('datetime', 'max', 'direct')
+         327±3μs         599±10μs     1.83  groupby.GroupByMethods.time_dtype_as_field('float', 'last', 'direct')
+         330±2μs          596±2μs     1.81  groupby.GroupByMethods.time_dtype_as_field('float', 'last', 'transformation')
+         327±1μs        583±0.9μs     1.78  groupby.GroupByMethods.time_dtype_as_field('datetime', 'min', 'direct')
+         326±1μs          582±2μs     1.78  groupby.GroupByMethods.time_dtype_as_field('datetime', 'min', 'transformation')
+      3.24±0.2ms       5.72±0.4ms     1.76  rolling.ExpandingMethods.time_expanding('Series', 'int', 'mean')
+         345±3μs          607±3μs     1.76  groupby.GroupByMethods.time_dtype_as_field('float', 'first', 'transformation')
+         347±2μs          610±3μs     1.76  groupby.GroupByMethods.time_dtype_as_field('float', 'first', 'direct')
+     3.32±0.04ms       5.77±0.4ms     1.74  rolling.Methods.time_rolling('DataFrame', 1000, 'int', 'kurt')
+     2.19±0.01ms      3.80±0.07ms     1.73  rolling.Quantile.time_quantile('DataFrame', 10, 'int', 1, 'nearest')
+     1.98±0.02ms       3.44±0.4ms     1.73  rolling.ExpandingMethods.time_expanding('DataFrame', 'int', 'sum')
+     2.19±0.01ms      3.79±0.02ms     1.73  rolling.Quantile.time_quantile('DataFrame', 10, 'int', 1, 'lower')
+     2.20±0.01ms      3.79±0.02ms     1.73  rolling.Quantile.time_quantile('DataFrame', 10, 'int', 1, 'linear')
+     2.19±0.02ms       3.79±0.1ms     1.73  rolling.Quantile.time_quantile('DataFrame', 10, 'int', 0, 'higher')
+     2.20±0.01ms         3.79±0ms     1.73  rolling.Quantile.time_quantile('DataFrame', 10, 'int', 0, 'lower')
+     2.20±0.01ms      3.79±0.02ms     1.72  rolling.Quantile.time_quantile('DataFrame', 10, 'int', 1, 'higher')
+     2.19±0.01ms      3.77±0.01ms     1.72  rolling.Quantile.time_quantile('DataFrame', 10, 'int', 0, 'midpoint')
+     3.37±0.07ms       5.79±0.5ms     1.72  rolling.Methods.time_rolling('DataFrame', 10, 'int', 'kurt')
+     2.20±0.02ms      3.78±0.08ms     1.72  rolling.Quantile.time_quantile('DataFrame', 10, 'int', 0, 'linear')
+     2.20±0.01ms      3.78±0.01ms     1.72  rolling.Quantile.time_quantile('DataFrame', 10, 'int', 1, 'midpoint')
+     2.20±0.01ms      3.77±0.01ms     1.72  rolling.Quantile.time_quantile('DataFrame', 10, 'int', 0, 'nearest')
+        2.18±0ms      3.74±0.07ms     1.71  rolling.Quantile.time_quantile('DataFrame', 1000, 'int', 1, 'nearest')
+         355±2μs          608±4μs     1.71  groupby.GroupByMethods.time_dtype_as_field('float', 'sum', 'transformation')
+        2.17±0ms      3.72±0.07ms     1.71  rolling.Quantile.time_quantile('DataFrame', 1000, 'int', 0, 'midpoint')
+     2.18±0.01ms       3.73±0.1ms     1.71  rolling.Quantile.time_quantile('DataFrame', 1000, 'int', 1, 'higher')
+     2.18±0.01ms      3.73±0.09ms     1.71  rolling.Quantile.time_quantile('DataFrame', 1000, 'int', 1, 'midpoint')
+         354±2μs          606±1μs     1.71  groupby.GroupByMethods.time_dtype_as_field('float', 'sum', 'direct')
+      3.24±0.2ms       5.54±0.4ms     1.71  rolling.Methods.time_rolling('Series', 1000, 'int', 'sum')
+       390±0.8μs          666±1μs     1.71  groupby.GroupByMethods.time_dtype_as_field('float', 'ffill', 'transformation')
+     2.18±0.01ms       3.72±0.1ms     1.71  rolling.Quantile.time_quantile('DataFrame', 1000, 'int', 0, 'linear')
+     2.18±0.01ms      3.71±0.08ms     1.71  rolling.Quantile.time_quantile('DataFrame', 1000, 'int', 1, 'linear')
+     2.18±0.01ms      3.73±0.08ms     1.71  rolling.Quantile.time_quantile('DataFrame', 1000, 'int', 1, 'lower')
+        2.18±0ms      3.72±0.07ms     1.71  rolling.Quantile.time_quantile('DataFrame', 1000, 'int', 0, 'higher')
+         355±2μs          606±4μs     1.70  groupby.GroupByMethods.time_dtype_as_field('float', 'mean', 'direct')
+     2.18±0.01ms      3.71±0.07ms     1.70  rolling.Quantile.time_quantile('DataFrame', 1000, 'int', 0, 'nearest')
+       356±0.6μs          606±2μs     1.70  groupby.GroupByMethods.time_dtype_as_field('float', 'mean', 'transformation')
+     2.18±0.01ms      3.71±0.08ms     1.70  rolling.Quantile.time_quantile('DataFrame', 1000, 'int', 0, 'lower')
+       389±0.8μs          662±1μs     1.70  groupby.GroupByMethods.time_dtype_as_field('float', 'bfill', 'transformation')
+         357±1μs          607±2μs     1.70  groupby.GroupByMethods.time_dtype_as_field('float', 'prod', 'direct')
+       390±0.9μs          662±2μs     1.70  groupby.GroupByMethods.time_dtype_as_field('float', 'ffill', 'direct')
+       390±0.6μs          661±2μs     1.70  groupby.GroupByMethods.time_dtype_as_field('float', 'bfill', 'direct')
+     3.28±0.06ms       5.55±0.5ms     1.69  rolling.Methods.time_rolling('DataFrame', 1000, 'int', 'skew')
+      3.36±0.2ms       5.68±0.4ms     1.69  rolling.Methods.time_rolling('Series', 1000, 'int', 'mean')
+       352±0.5μs        595±0.4μs     1.69  groupby.GroupByMethods.time_dtype_as_field('object', 'shift', 'transformation')
+         359±2μs          605±3μs     1.69  groupby.GroupByMethods.time_dtype_as_field('float', 'prod', 'transformation')
+       352±0.9μs          594±2μs     1.69  groupby.GroupByMethods.time_dtype_as_field('object', 'shift', 'direct')
+         368±2μs          619±2μs     1.68  groupby.GroupByMethods.time_dtype_as_field('float', 'var', 'transformation')
+         366±2μs          616±4μs     1.68  groupby.GroupByMethods.time_dtype_as_field('float', 'min', 'transformation')
+         369±2μs        620±0.8μs     1.68  groupby.GroupByMethods.time_dtype_as_field('float', 'var', 'direct')
+         366±1μs          612±1μs     1.67  groupby.GroupByMethods.time_dtype_as_field('float', 'min', 'direct')
+       364±0.7μs          608±2μs     1.67  groupby.GroupByMethods.time_dtype_as_field('float', 'max', 'transformation')
+         364±1μs          607±2μs     1.67  groupby.GroupByMethods.time_dtype_as_field('float', 'max', 'direct')
+       395±0.5μs        659±0.8μs     1.67  groupby.GroupByMethods.time_dtype_as_field('datetime', 'bfill', 'direct')
+       395±0.7μs          659±2μs     1.67  groupby.GroupByMethods.time_dtype_as_field('datetime', 'ffill', 'direct')
+       394±0.6μs          657±2μs     1.67  groupby.GroupByMethods.time_dtype_as_field('datetime', 'bfill', 'transformation')
+       395±0.1μs          655±1μs     1.66  groupby.GroupByMethods.time_dtype_as_field('datetime', 'ffill', 'transformation')
+         392±1μs          649±1μs     1.65  groupby.GroupByMethods.time_dtype_as_group('object', 'last', 'transformation')
+         393±2μs          650±1μs     1.65  groupby.GroupByMethods.time_dtype_as_group('object', 'last', 'direct')
+         392±3μs          646±3μs     1.65  groupby.GroupByMethods.time_dtype_as_field('float', 'median', 'transformation')
+         391±2μs          644±2μs     1.65  groupby.GroupByMethods.time_dtype_as_field('float', 'median', 'direct')
+      3.86±0.1ms      6.34±0.03ms     1.64  rolling.Methods.time_rolling('DataFrame', 1000, 'int', 'count')
+       397±0.6μs          652±2μs     1.64  groupby.GroupByMethods.time_dtype_as_group('object', 'first', 'transformation')
+       410±0.5μs          671±2μs     1.64  groupby.GroupByMethods.time_dtype_as_group('int', 'last', 'transformation')
+         410±2μs          670±1μs     1.63  groupby.GroupByMethods.time_dtype_as_group('int', 'last', 'direct')
+         398±1μs          650±1μs     1.63  groupby.GroupByMethods.time_dtype_as_group('object', 'first', 'direct')
+         421±1μs        688±0.8μs     1.63  groupby.GroupByMethods.time_dtype_as_group('float', 'last', 'transformation')
+      2.87±0.2ms       4.68±0.3ms     1.63  rolling.ExpandingMethods.time_expanding('Series', 'float', 'sum')
+         422±2μs          688±1μs     1.63  groupby.GroupByMethods.time_dtype_as_group('float', 'last', 'direct')
+         419±2μs          684±3μs     1.63  groupby.GroupByMethods.time_dtype_as_group('datetime', 'last', 'direct')
+         404±2μs          658±2μs     1.63  groupby.GroupByMethods.time_dtype_as_field('int', 'last', 'direct')
+         418±1μs          682±3μs     1.63  groupby.GroupByMethods.time_dtype_as_group('datetime', 'last', 'transformation')
+         405±2μs          659±2μs     1.63  groupby.GroupByMethods.time_dtype_as_field('int', 'last', 'transformation')
+         421±2μs          684±2μs     1.62  groupby.GroupByMethods.time_dtype_as_group('datetime', 'first', 'direct')
+       422±0.8μs          681±2μs     1.61  groupby.GroupByMethods.time_dtype_as_group('datetime', 'first', 'transformation')
+     7.11±0.09ms       11.4±0.3ms     1.61  timeseries.AsOf.time_asof_nan('DataFrame')
+         429±2μs          686±1μs     1.60  groupby.GroupByMethods.time_dtype_as_group('float', 'first', 'direct')
+         420±1μs        671±0.8μs     1.60  groupby.GroupByMethods.time_dtype_as_field('int', 'first', 'transformation')
+       421±0.9μs          672±1μs     1.60  groupby.GroupByMethods.time_dtype_as_field('int', 'first', 'direct')
+       427±0.7μs          681±1μs     1.60  groupby.GroupByMethods.time_dtype_as_group('int', 'first', 'transformation')
+         427±1μs          681±2μs     1.59  groupby.GroupByMethods.time_dtype_as_group('int', 'first', 'direct')
+         430±3μs        687±0.7μs     1.59  groupby.GroupByMethods.time_dtype_as_group('float', 'first', 'transformation')
+         448±1μs          708±2μs     1.58  groupby.GroupByMethods.time_dtype_as_group('float', 'ffill', 'transformation')
+       449±0.7μs          708±2μs     1.58  groupby.GroupByMethods.time_dtype_as_group('float', 'bfill', 'direct')
+         448±1μs          706±1μs     1.58  groupby.GroupByMethods.time_dtype_as_group('float', 'bfill', 'transformation')
+         449±1μs          706±2μs     1.57  groupby.GroupByMethods.time_dtype_as_group('float', 'ffill', 'direct')
+     2.02±0.02ms       3.17±0.6ms     1.57  rolling.Methods.time_rolling('DataFrame', 1000, 'float', 'sum')
+         453±2μs          710±3μs     1.57  groupby.GroupByMethods.time_dtype_as_group('int', 'bfill', 'direct')
+         452±2μs          707±1μs     1.57  groupby.GroupByMethods.time_dtype_as_group('int', 'ffill', 'direct')
+     3.85±0.06ms      6.02±0.02ms     1.56  rolling.ExpandingMethods.time_expanding('DataFrame', 'int', 'count')
+         450±1μs        703±0.9μs     1.56  groupby.GroupByMethods.time_dtype_as_field('int', 'bfill', 'transformation')
+         449±1μs          700±1μs     1.56  groupby.GroupByMethods.time_dtype_as_field('int', 'ffill', 'transformation')
+     3.91±0.07ms      6.09±0.06ms     1.56  rolling.ExpandingMethods.time_expanding('DataFrame', 'float', 'count')
+         452±2μs          705±2μs     1.56  groupby.GroupByMethods.time_dtype_as_group('int', 'bfill', 'transformation')
+         453±2μs          706±2μs     1.56  groupby.GroupByMethods.time_dtype_as_group('int', 'ffill', 'transformation')
+         450±1μs          700±1μs     1.56  groupby.GroupByMethods.time_dtype_as_field('int', 'bfill', 'direct')
+      4.12±0.1ms      6.41±0.04ms     1.55  rolling.Methods.time_rolling('DataFrame', 1000, 'float', 'count')
+         450±1μs        700±0.9μs     1.55  groupby.GroupByMethods.time_dtype_as_field('int', 'ffill', 'direct')
+     3.16±0.02ms      4.91±0.09ms     1.55  rolling.ExpandingMethods.time_expanding('DataFrame', 'float', 'min')
+     4.04±0.06ms       6.27±0.1ms     1.55  rolling.Methods.time_rolling('DataFrame', 10, 'int', 'count')
+     3.11±0.01ms      4.81±0.08ms     1.55  rolling.Quantile.time_quantile('DataFrame', 10, 'float', 1, 'higher')
+         447±1μs          691±1μs     1.55  groupby.GroupByMethods.time_dtype_as_group('float', 'max', 'direct')
+     3.11±0.01ms      4.81±0.08ms     1.55  rolling.Quantile.time_quantile('DataFrame', 10, 'float', 1, 'linear')
+       446±0.9μs        689±0.9μs     1.55  groupby.GroupByMethods.time_dtype_as_group('float', 'max', 'transformation')
+         521±1μs          805±2μs     1.54  groupby.GroupByMethods.time_dtype_as_field('datetime', 'quantile', 'transformation')
+         446±2μs          688±2μs     1.54  groupby.GroupByMethods.time_dtype_as_group('datetime', 'min', 'transformation')
+     3.17±0.01ms      4.89±0.08ms     1.54  rolling.ExpandingMethods.time_expanding('DataFrame', 'float', 'max')
+       448±0.8μs        690±0.4μs     1.54  groupby.GroupByMethods.time_dtype_as_group('float', 'min', 'transformation')
+         448±1μs          691±1μs     1.54  groupby.GroupByMethods.time_dtype_as_group('float', 'min', 'direct')
+     1.83±0.01ms       2.83±0.3ms     1.54  rolling.ExpandingMethods.time_expanding('DataFrame', 'float', 'sum')
+     3.13±0.02ms      4.82±0.06ms     1.54  rolling.Quantile.time_quantile('DataFrame', 10, 'float', 0, 'lower')
+       442±0.5μs        680±0.4μs     1.54  groupby.GroupByMethods.time_dtype_as_group('int', 'max', 'transformation')
+     3.10±0.02ms      4.76±0.08ms     1.54  rolling.Methods.time_rolling('DataFrame', 10, 'float', 'max')
+       444±0.7μs          682±1μs     1.53  groupby.GroupByMethods.time_dtype_as_group('int', 'min', 'transformation')
+      13.7±0.9μs       21.1±0.2μs     1.53  algorithms.MaybeConvertObjects.time_maybe_convert_objects
+       441±0.8μs        676±0.8μs     1.53  groupby.GroupByMethods.time_dtype_as_field('int', 'max', 'direct')
+       442±0.8μs        679±0.7μs     1.53  groupby.GroupByMethods.time_dtype_as_group('int', 'max', 'direct')
+         448±2μs          687±2μs     1.53  groupby.GroupByMethods.time_dtype_as_group('datetime', 'min', 'direct')
+     3.13±0.01ms      4.80±0.07ms     1.53  rolling.Quantile.time_quantile('DataFrame', 10, 'float', 0, 'midpoint')
+     4.08±0.06ms       6.26±0.1ms     1.53  rolling.Methods.time_rolling('DataFrame', 10, 'float', 'count')
+         524±2μs          803±2μs     1.53  groupby.GroupByMethods.time_dtype_as_field('datetime', 'quantile', 'direct')
+         479±1μs        735±0.2μs     1.53  groupby.GroupByMethods.time_dtype_as_field('int', 'var', 'transformation')
+     3.13±0.01ms      4.80±0.07ms     1.53  rolling.Quantile.time_quantile('DataFrame', 10, 'float', 0, 'linear')
+     3.10±0.01ms      4.76±0.07ms     1.53  rolling.Quantile.time_quantile('DataFrame', 10, 'float', 1, 'lower')
+       447±0.4μs          685±2μs     1.53  groupby.GroupByMethods.time_dtype_as_group('datetime', 'max', 'transformation')
+     3.13±0.01ms      4.79±0.08ms     1.53  rolling.Quantile.time_quantile('DataFrame', 10, 'float', 0, 'nearest')
+       443±0.7μs          678±1μs     1.53  groupby.GroupByMethods.time_dtype_as_field('int', 'min', 'transformation')
+       445±0.7μs        681±0.9μs     1.53  groupby.GroupByMethods.time_dtype_as_group('int', 'min', 'direct')
+     3.13±0.01ms      4.79±0.06ms     1.53  rolling.Quantile.time_quantile('DataFrame', 10, 'float', 0, 'higher')
+       443±0.5μs          677±1μs     1.53  groupby.GroupByMethods.time_dtype_as_field('int', 'min', 'direct')
+     3.11±0.01ms      4.76±0.09ms     1.53  rolling.Quantile.time_quantile('DataFrame', 10, 'float', 1, 'midpoint')
+         447±2μs          683±1μs     1.53  groupby.GroupByMethods.time_dtype_as_group('datetime', 'max', 'direct')
+     3.14±0.03ms      4.79±0.09ms     1.53  rolling.Methods.time_rolling('DataFrame', 10, 'float', 'min')
+     3.12±0.01ms      4.75±0.08ms     1.52  rolling.Quantile.time_quantile('DataFrame', 10, 'float', 1, 'nearest')
+     3.28±0.02ms      4.99±0.09ms     1.52  rolling.ExpandingMethods.time_expanding('DataFrame', 'int', 'max')
+     3.29±0.05ms       5.01±0.1ms     1.52  rolling.ExpandingMethods.time_expanding('DataFrame', 'int', 'min')
+      4.40±0.3ms       6.68±0.4ms     1.52  rolling.ExpandingMethods.time_expanding('Series', 'int', 'kurt')
+      18.8±0.2μs       28.6±0.3μs     1.52  categoricals.CategoricalSlicing.time_getitem_list_like('monotonic_incr')
+         444±1μs          674±2μs     1.52  groupby.GroupByMethods.time_dtype_as_field('int', 'max', 'transformation')
+         481±3μs          731±2μs     1.52  groupby.GroupByMethods.time_dtype_as_field('int', 'var', 'direct')
+         497±3μs          753±2μs     1.52  groupby.GroupByMethods.time_dtype_as_group('float', 'var', 'transformation')
+      19.0±0.4μs       28.8±0.3μs     1.51  categoricals.CategoricalSlicing.time_getitem_list_like('monotonic_decr')
+         497±3μs          753±2μs     1.51  groupby.GroupByMethods.time_dtype_as_group('float', 'var', 'direct')
+     2.17±0.02ms       3.28±0.6ms     1.51  rolling.ExpandingMethods.time_expanding('DataFrame', 'int', 'mean')
+     3.26±0.01ms      4.90±0.01ms     1.51  rolling.Methods.time_rolling('DataFrame', 10, 'int', 'min')
+     3.24±0.01ms      4.87±0.02ms     1.50  rolling.Methods.time_rolling('DataFrame', 10, 'int', 'max')
+      19.1±0.5μs       28.6±0.2μs     1.50  categoricals.CategoricalSlicing.time_getitem_list_like('non_monotonic')
+     2.02±0.04ms       3.03±0.4ms     1.50  rolling.Methods.time_rolling('DataFrame', 10, 'float', 'sum')
+     3.28±0.01ms      4.91±0.01ms     1.50  rolling.Methods.time_rolling('DataFrame', 1000, 'int', 'max')
+       106±0.5μs          158±1μs     1.50  timeseries.SortIndex.time_sort_index(True)
+     3.33±0.05ms      4.96±0.01ms     1.49  rolling.Methods.time_rolling('DataFrame', 1000, 'int', 'min')
+     3.16±0.01ms      4.70±0.01ms     1.49  rolling.Methods.time_rolling('DataFrame', 1000, 'float', 'max')
+     3.16±0.02ms      4.70±0.02ms     1.49  rolling.Quantile.time_quantile('DataFrame', 1000, 'float', 1, 'midpoint')
+     3.17±0.01ms      4.70±0.03ms     1.48  rolling.Quantile.time_quantile('DataFrame', 1000, 'float', 1, 'lower')
+     3.17±0.01ms      4.70±0.03ms     1.48  rolling.Quantile.time_quantile('DataFrame', 1000, 'float', 1, 'linear')
+     3.16±0.01ms      4.69±0.02ms     1.48  rolling.Quantile.time_quantile('DataFrame', 1000, 'float', 1, 'higher')
+      4.55±0.3ms       6.73±0.4ms     1.48  rolling.Methods.time_rolling('Series', 1000, 'int', 'kurt')
+      3.14±0.2ms       4.65±0.3ms     1.48  rolling.Methods.time_rolling('Series', 10, 'float', 'sum')
+     2.18±0.03ms       3.23±0.2ms     1.48  rolling.Methods.time_rolling('DataFrame', 10, 'float', 'mean')
+     3.21±0.01ms      4.74±0.01ms     1.48  rolling.Methods.time_rolling('DataFrame', 1000, 'float', 'min')
+     3.17±0.02ms      4.69±0.02ms     1.48  rolling.Quantile.time_quantile('DataFrame', 1000, 'float', 1, 'nearest')
+     3.22±0.02ms      4.75±0.02ms     1.47  rolling.Quantile.time_quantile('DataFrame', 1000, 'float', 0, 'midpoint')
+      3.14±0.2ms       4.62±0.3ms     1.47  rolling.Methods.time_rolling('Series', 1000, 'float', 'sum')
+     3.22±0.02ms      4.75±0.03ms     1.47  rolling.Quantile.time_quantile('DataFrame', 1000, 'float', 0, 'nearest')
+     3.22±0.02ms      4.73±0.02ms     1.47  rolling.Quantile.time_quantile('DataFrame', 1000, 'float', 0, 'linear')
+         585±2μs          859±3μs     1.47  multiindex_object.Values.time_datetime_level_values_sliced
+     3.23±0.01ms      4.74±0.02ms     1.47  rolling.Quantile.time_quantile('DataFrame', 1000, 'float', 0, 'higher')
+     3.22±0.02ms      4.72±0.01ms     1.46  rolling.Quantile.time_quantile('DataFrame', 1000, 'float', 0, 'lower')
+      4.56±0.3ms       6.67±0.4ms     1.46  rolling.ExpandingMethods.time_expanding('Series', 'int', 'skew')
+     2.16±0.04ms       3.16±0.7ms     1.46  rolling.Methods.time_rolling('DataFrame', 1000, 'float', 'mean')
+      3.27±0.2ms       4.78±0.3ms     1.46  rolling.Methods.time_rolling('Series', 10, 'float', 'mean')
+         538±3μs          786±3μs     1.46  groupby.GroupByMethods.time_dtype_as_field('float', 'std', 'direct')
+     2.03±0.01ms       2.96±0.4ms     1.46  rolling.ExpandingMethods.time_expanding('DataFrame', 'float', 'mean')
+         541±2μs          787±4μs     1.46  groupby.GroupByMethods.time_dtype_as_field('float', 'std', 'transformation')
+     3.31±0.05ms       4.82±0.8ms     1.45  rolling.Methods.time_rolling('DataFrame', 10, 'int', 'skew')
+      4.51±0.3ms       6.55±0.4ms     1.45  rolling.Methods.time_rolling('Series', 1000, 'int', 'skew')
+         643±2μs          934±2μs     1.45  groupby.GroupByMethods.time_dtype_as_group('float', 'quantile', 'direct')
+         645±2μs          936±2μs     1.45  groupby.GroupByMethods.time_dtype_as_group('float', 'quantile', 'transformation')
+      3.23±0.2ms       4.69±0.4ms     1.45  rolling.Methods.time_rolling('Series', 10, 'int', 'sum')
+      3.28±0.2ms       4.76±0.3ms     1.45  rolling.Methods.time_rolling('Series', 1000, 'float', 'mean')
+         627±1μs          909±3μs     1.45  groupby.GroupByMethods.time_dtype_as_field('int', 'quantile', 'direct')
+       628±0.7μs          911±2μs     1.45  groupby.GroupByMethods.time_dtype_as_field('int', 'quantile', 'transformation')
+         638±1μs          924±3μs     1.45  groupby.GroupByMethods.time_dtype_as_group('int', 'quantile', 'direct')
+       641±0.9μs          928±2μs     1.45  groupby.GroupByMethods.time_dtype_as_group('datetime', 'quantile', 'direct')
+         641±1μs          926±1μs     1.45  groupby.GroupByMethods.time_dtype_as_group('datetime', 'quantile', 'transformation')
+         638±2μs          921±3μs     1.44  groupby.GroupByMethods.time_dtype_as_group('int', 'quantile', 'transformation')
+         633±1μs          914±5μs     1.44  groupby.GroupByMethods.time_dtype_as_field('float', 'quantile', 'direct')
+         633±2μs          911±1μs     1.44  groupby.GroupByMethods.time_dtype_as_field('float', 'quantile', 'transformation')
+      3.16±0.2ms       4.54±0.4ms     1.44  rolling.ExpandingMethods.time_expanding('Series', 'float', 'mean')
+      3.36±0.2ms       4.83±0.4ms     1.44  rolling.Methods.time_rolling('Series', 10, 'int', 'mean')
+         599±1μs          858±2μs     1.43  groupby.GroupByMethods.time_dtype_as_field('object', 'ffill', 'direct')
+         598±1μs          856±3μs     1.43  groupby.GroupByMethods.time_dtype_as_field('object', 'bfill', 'direct')
+         599±1μs          856±2μs     1.43  groupby.GroupByMethods.time_dtype_as_field('object', 'bfill', 'transformation')
+         601±1μs          859±2μs     1.43  groupby.GroupByMethods.time_dtype_as_field('object', 'ffill', 'transformation')
+      8.43±0.7ms       11.9±0.2ms     1.41  series_methods.NanOps.time_func('std', 1000000, 'float64')
+     3.14±0.02ms       4.40±0.4ms     1.40  rolling.ExpandingMethods.time_expanding('DataFrame', 'int', 'kurt')
+      7.77±0.2ms      10.8±0.02ms     1.39  timeseries.ResampleSeries.time_resample('period', '5min', 'ohlc')
+         651±3μs          900±2μs     1.38  groupby.GroupByMethods.time_dtype_as_field('int', 'std', 'direct')
+         653±3μs          898±2μs     1.38  groupby.GroupByMethods.time_dtype_as_field('int', 'std', 'transformation')
+     3.22±0.02ms       4.41±0.3ms     1.37  rolling.Methods.time_rolling('DataFrame', 10, 'float', 'kurt')
+     5.65±0.06ms      7.75±0.09ms     1.37  indexing.NonNumericSeriesIndexing.time_getitem_list_like('string', 'nonunique_monotonic_inc')
+         679±2μs          930±3μs     1.37  groupby.GroupByMethods.time_dtype_as_group('float', 'std', 'transformation')
+         681±3μs          930±3μs     1.37  groupby.GroupByMethods.time_dtype_as_group('float', 'std', 'direct')
+     3.19±0.02ms       4.35±0.8ms     1.37  rolling.Methods.time_rolling('DataFrame', 1000, 'float', 'kurt')
+        753±10μs      1.03±0.01ms     1.36  groupby.GroupByMethods.time_dtype_as_field('object', 'all', 'direct')
+        752±10μs      1.02±0.01ms     1.36  groupby.GroupByMethods.time_dtype_as_field('object', 'all', 'transformation')
+        756±10μs      1.03±0.01ms     1.36  groupby.GroupByMethods.time_dtype_as_field('object', 'any', 'direct')
+      3.26±0.2ms       4.41±0.1ms     1.35  rolling.Quantile.time_quantile('Series', 10, 'int', 1, 'higher')
+      3.26±0.2ms      4.40±0.09ms     1.35  rolling.Quantile.time_quantile('Series', 10, 'int', 0, 'higher')
+         761±7μs      1.03±0.01ms     1.35  groupby.GroupByMethods.time_dtype_as_field('object', 'any', 'transformation')
+      3.27±0.2ms       4.40±0.1ms     1.35  rolling.Quantile.time_quantile('Series', 10, 'int', 1, 'midpoint')
+      3.26±0.2ms       4.39±0.1ms     1.35  rolling.Quantile.time_quantile('Series', 10, 'int', 1, 'lower')
+      3.26±0.2ms       4.39±0.1ms     1.35  rolling.Quantile.time_quantile('Series', 10, 'int', 1, 'nearest')
+     6.49±0.09ms       8.73±0.2ms     1.35  timeseries.ResampleSeries.time_resample('period', '1D', 'ohlc')
+      3.26±0.2ms       4.38±0.1ms     1.34  rolling.Quantile.time_quantile('Series', 10, 'int', 1, 'linear')
+     3.32±0.04ms       4.46±0.4ms     1.34  rolling.ExpandingMethods.time_expanding('DataFrame', 'int', 'skew')
+     3.81±0.03ms       5.11±0.1ms     1.34  rolling.ExpandingMethods.time_expanding('Series', 'int', 'std')
+      3.26±0.2ms       4.38±0.1ms     1.34  rolling.Quantile.time_quantile('Series', 10, 'int', 0, 'linear')
+     3.00±0.01ms       4.03±0.2ms     1.34  rolling.ExpandingMethods.time_expanding('DataFrame', 'float', 'kurt')
+      3.29±0.2ms       4.40±0.1ms     1.34  rolling.Quantile.time_quantile('Series', 10, 'int', 0, 'nearest')
+      3.24±0.2ms      4.33±0.05ms     1.34  rolling.Quantile.time_quantile('Series', 1000, 'int', 1, 'linear')
+     16.5±0.06μs       22.0±0.3μs     1.34  categoricals.CategoricalSlicing.time_getitem_slice('monotonic_decr')
+      3.29±0.2ms       4.40±0.1ms     1.34  rolling.Quantile.time_quantile('Series', 10, 'int', 0, 'midpoint')
+      3.25±0.2ms      4.33±0.05ms     1.34  rolling.Quantile.time_quantile('Series', 1000, 'int', 0, 'lower')
+      4.45±0.3ms       5.94±0.3ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'float', 1, 'nearest')
+      4.45±0.3ms       5.93±0.3ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'float', 1, 'linear')
+      4.45±0.3ms       5.91±0.3ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'float', 1, 'higher')
+     1.04±0.01ms      1.39±0.01ms     1.33  ctors.SeriesConstructors.time_series_constructor(<class 'list'>, False, 'float')
+      3.29±0.2ms      4.37±0.06ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'int', 0, 'nearest')
+      3.25±0.2ms      4.32±0.05ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'int', 1, 'midpoint')
+     1.09±0.01ms      1.45±0.01ms     1.33  ctors.SeriesConstructors.time_series_constructor(<class 'list'>, True, 'float')
+      4.50±0.3ms       5.97±0.3ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'float', 0, 'linear')
+      3.31±0.2ms       4.39±0.1ms     1.33  rolling.Quantile.time_quantile('Series', 10, 'int', 0, 'lower')
+      4.45±0.3ms       5.91±0.3ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'float', 1, 'lower')
+      3.25±0.3ms      4.32±0.06ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'int', 0, 'midpoint')
+      3.25±0.2ms      4.31±0.05ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'int', 0, 'linear')
+      3.25±0.2ms      4.32±0.05ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'int', 1, 'higher')
+      4.49±0.3ms       5.97±0.3ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'float', 0, 'higher')
+      3.26±0.2ms      4.32±0.05ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'int', 1, 'nearest')
+      25.2±0.4ms       33.4±0.4ms     1.33  io.hdf.HDF.time_read_hdf('fixed')
+      4.45±0.3ms       5.90±0.4ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'float', 1, 'midpoint')
+      4.51±0.3ms       5.98±0.3ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'float', 0, 'nearest')
+      4.51±0.3ms       5.98±0.3ms     1.33  rolling.Quantile.time_quantile('Series', 1000, 'float', 0, 'midpoint')
+     5.98±0.01ms       7.92±0.1ms     1.32  indexing.NonNumericSeriesIndexing.time_getitem_list_like('string', 'non_monotonic')
+      3.25±0.2ms      4.31±0.05ms     1.32  rolling.Quantile.time_quantile('Series', 1000, 'int', 1, 'lower')
+     3.15±0.03ms       4.17±0.3ms     1.32  rolling.Methods.time_rolling('DataFrame', 10, 'float', 'skew')
+     3.14±0.02ms       4.15±0.8ms     1.32  rolling.Methods.time_rolling('DataFrame', 1000, 'float', 'skew')
+      4.52±0.3ms       5.97±0.3ms     1.32  rolling.Quantile.time_quantile('Series', 1000, 'float', 0, 'lower')
+     5.94±0.06ms       7.85±0.1ms     1.32  indexing.NonNumericSeriesIndexing.time_getitem_list_like('string', 'unique_monotonic_inc')
+      4.56±0.3ms       6.01±0.4ms     1.32  rolling.Methods.time_rolling('Series', 10, 'int', 'kurt')
+      3.28±0.2ms      4.32±0.05ms     1.32  rolling.Quantile.time_quantile('Series', 1000, 'int', 0, 'higher')
+      17.0±0.2μs       22.4±0.2μs     1.32  categoricals.CategoricalSlicing.time_getitem_slice('non_monotonic')
+     16.8±0.09μs       22.0±0.4μs     1.31  categoricals.CategoricalSlicing.time_getitem_slice('monotonic_incr')
+         540±5μs          708±9μs     1.31  period.Indexing.time_intersection
+      4.29±0.3ms       5.62±0.4ms     1.31  rolling.ExpandingMethods.time_expanding('Series', 'float', 'kurt')
+      4.39±0.3ms       5.71±0.1ms     1.30  rolling.Quantile.time_quantile('Series', 10, 'float', 0, 'nearest')
+      4.40±0.3ms       5.71±0.2ms     1.30  rolling.Quantile.time_quantile('Series', 10, 'float', 0, 'lower')
+         976±6μs      1.27±0.01ms     1.30  indexing.NonNumericSeriesIndexing.time_getitem_pos_slice('string', 'nonunique_monotonic_inc')
+      4.37±0.3ms       5.68±0.1ms     1.30  rolling.Quantile.time_quantile('Series', 10, 'float', 1, 'nearest')
+        962±10μs      1.25±0.02ms     1.30  indexing.NonNumericSeriesIndexing.time_getitem_pos_slice('string', 'non_monotonic')
+      4.37±0.3ms       5.68±0.3ms     1.30  rolling.Methods.time_rolling('Series', 10, 'float', 'max')
+      4.38±0.3ms       5.68±0.1ms     1.30  rolling.Quantile.time_quantile('Series', 10, 'float', 1, 'higher')
+      4.40±0.3ms       5.71±0.1ms     1.30  rolling.Quantile.time_quantile('Series', 10, 'float', 0, 'linear')
+      4.39±0.3ms       5.70±0.1ms     1.30  rolling.Quantile.time_quantile('Series', 10, 'float', 0, 'midpoint')
+         684±3μs          887±2μs     1.30  groupby.GroupByMethods.time_dtype_as_field('object', 'first', 'direct')
+      4.38±0.3ms      5.68±0.09ms     1.30  rolling.Quantile.time_quantile('Series', 10, 'float', 1, 'linear')
+      4.38±0.3ms       5.67±0.1ms     1.30  rolling.Quantile.time_quantile('Series', 10, 'float', 1, 'midpoint')
+      4.38±0.3ms       5.67±0.1ms     1.29  rolling.Quantile.time_quantile('Series', 10, 'float', 1, 'lower')
+      4.41±0.3ms       5.70±0.1ms     1.29  rolling.Quantile.time_quantile('Series', 10, 'float', 0, 'higher')
+     6.20±0.07μs       7.99±0.1μs     1.29  categoricals.Indexing.time_get_loc
+        1.24±0ms      1.59±0.01ms     1.29  frame_methods.Quantile.time_frame_quantile(1)
+        1.89±0ms      2.43±0.01ms     1.29  groupby.GroupByMethods.time_dtype_as_field('float', 'pct_change', 'direct')
+         685±5μs          882±2μs     1.29  groupby.GroupByMethods.time_dtype_as_field('object', 'first', 'transformation')
+      37.5±0.3ms       48.3±0.6ms     1.29  frame_ctor.FromDicts.time_nested_dict_index
+         679±3μs          873±3μs     1.29  groupby.GroupByMethods.time_dtype_as_field('object', 'last', 'direct')
+        1.89±0ms      2.43±0.01ms     1.29  groupby.GroupByMethods.time_dtype_as_field('float', 'pct_change', 'transformation')
+         405±2μs          521±3μs     1.29  index_object.IntervalIndexMethod.time_intersection(1000)
+         291±3μs          373±2μs     1.28  join_merge.Concat.time_concat_empty_left(1)
+         679±4μs          872±3μs     1.28  groupby.GroupByMethods.time_dtype_as_field('object', 'last', 'transformation')
+      4.39±0.3ms       5.63±0.2ms     1.28  rolling.Methods.time_rolling('Series', 10, 'float', 'min')
+         422±3μs          539±1μs     1.28  index_object.IntervalIndexMethod.time_intersection_one_duplicate(1000)
+         292±3μs          373±2μs     1.28  join_merge.Concat.time_concat_empty_right(1)
+         980±9μs      1.25±0.01ms     1.28  indexing.NonNumericSeriesIndexing.time_getitem_pos_slice('string', 'unique_monotonic_inc')
+         904±6μs      1.15±0.01ms     1.27  stat_ops.SeriesOps.time_op('std', 'float')
+       463±0.2ns          589±9ns     1.27  indexing.MethodLookup.time_lookup_iloc
+     3.17±0.01ms       4.04±0.2ms     1.27  rolling.ExpandingMethods.time_expanding('DataFrame', 'float', 'skew')
+         689±2μs          874±1μs     1.27  groupby.GroupByMethods.time_dtype_as_field('int', 'prod', 'direct')
+      4.51±0.3ms       5.72±0.4ms     1.27  rolling.Methods.time_rolling('Series', 10, 'int', 'skew')
+         691±4μs          875±3μs     1.27  groupby.GroupByMethods.time_dtype_as_field('int', 'mean', 'direct')
+      37.8±0.1ms       47.8±0.7ms     1.27  frame_ctor.FromDicts.time_nested_dict_index_columns
+         831±6μs         1.05±0ms     1.27  indexing.NonNumericSeriesIndexing.time_getitem_list_like('datetime', 'non_monotonic')
+      4.44±0.3ms      5.61±0.07ms     1.26  rolling.Methods.time_rolling('Series', 1000, 'float', 'max')
+         689±3μs          871±2μs     1.26  groupby.GroupByMethods.time_dtype_as_field('int', 'prod', 'transformation')
+         703±1μs          888±2μs     1.26  groupby.GroupByMethods.time_dtype_as_group('int', 'mean', 'transformation')
+         691±2μs          873±2μs     1.26  groupby.GroupByMethods.time_dtype_as_field('int', 'mean', 'transformation')
+         739±2μs          933±4μs     1.26  groupby.GroupByMethods.time_dtype_as_group('int', 'median', 'direct')
+         829±5μs         1.05±0ms     1.26  indexing.NonNumericSeriesIndexing.time_getitem_list_like('datetime', 'unique_monotonic_inc')
+      4.52±0.2ms      5.71±0.06ms     1.26  rolling.ExpandingMethods.time_expanding('Series', 'int', 'min')
+         703±2μs          887±2μs     1.26  groupby.GroupByMethods.time_dtype_as_group('int', 'mean', 'direct')
+         633±5μs          798±2μs     1.26  groupby.GroupByMethods.time_dtype_as_group('int', 'var', 'direct')
+      4.49±0.3ms      5.66±0.08ms     1.26  rolling.Methods.time_rolling('Series', 1000, 'float', 'min')
+         737±1μs          928±1μs     1.26  groupby.GroupByMethods.time_dtype_as_group('int', 'median', 'transformation')
+         631±3μs          794±1μs     1.26  groupby.GroupByMethods.time_dtype_as_group('int', 'var', 'transformation')
+     1.98±0.01ms         2.49±0ms     1.26  groupby.GroupByMethods.time_dtype_as_field('int', 'pct_change', 'direct')
+     2.81±0.05ms      3.52±0.01ms     1.26  rolling.Methods.time_rolling('DataFrame', 10, 'float', 'std')
+         731±3μs         918±20μs     1.26  groupby.GroupByMethods.time_dtype_as_field('int', 'median', 'transformation')
+         731±3μs          918±2μs     1.26  groupby.GroupByMethods.time_dtype_as_field('int', 'median', 'direct')
+      4.48±0.3ms       5.62±0.2ms     1.25  rolling.Methods.time_rolling('Series', 10, 'int', 'min')
+      4.52±0.2ms      5.67±0.07ms     1.25  rolling.ExpandingMethods.time_expanding('Series', 'int', 'max')
+        1.98±0ms      2.48±0.01ms     1.25  groupby.GroupByMethods.time_dtype_as_field('int', 'pct_change', 'transformation')
+         104±3μs        130±0.6μs     1.25  indexing.NumericSeriesIndexing.time_getitem_scalar(<class 'pandas.core.indexes.numeric.UInt64Index'>, 'unique_monotonic_inc')
+        2.07±0ms      2.58±0.01ms     1.25  groupby.GroupByMethods.time_dtype_as_group('int', 'pct_change', 'direct')
+      4.47±0.3ms       5.59±0.4ms     1.25  rolling.Methods.time_rolling('Series', 10, 'float', 'kurt')
+      4.46±0.2ms       5.58±0.2ms     1.25  rolling.ExpandingMethods.time_expanding('Series', 'float', 'max')
+         725±1μs          906±1μs     1.25  timeseries.ResetIndex.time_reest_datetimeindex('US/Eastern')
+         111±2ms          138±1ms     1.25  reshape.Cut.time_qcut_timedelta(1000)
+     1.08±0.01ms      1.35±0.01ms     1.25  indexing.NonNumericSeriesIndexing.time_getitem_list_like('period', 'non_monotonic')
+        2.06±0ms      2.57±0.01ms     1.25  groupby.GroupByMethods.time_dtype_as_group('int', 'pct_change', 'transformation')
+      37.6±0.4ms       46.8±0.6ms     1.25  frame_ctor.FromDicts.time_list_of_dict
+        1.18±0ms         1.47±0ms     1.24  groupby.GroupByMethods.time_dtype_as_field('float', 'sem', 'direct')
+      53.3±0.3μs       66.3±0.6μs     1.24  indexing.CategoricalIndexIndexing.time_getitem_list_like('monotonic_decr')
+     2.82±0.04ms      3.51±0.01ms     1.24  rolling.Methods.time_rolling('DataFrame', 1000, 'float', 'std')
+         468±3ns          582±3ns     1.24  indexing.MethodLookup.time_lookup_loc
+      53.7±0.5μs       66.7±0.4μs     1.24  indexing.CategoricalIndexIndexing.time_getitem_list_like('non_monotonic')
+      4.46±0.3ms       5.54±0.4ms     1.24  rolling.Methods.time_rolling('Series', 1000, 'float', 'kurt')
+      4.47±0.2ms       5.55±0.2ms     1.24  rolling.Methods.time_rolling('Series', 10, 'int', 'max')
+        1.18±0ms      1.47±0.01ms     1.24  groupby.GroupByMethods.time_dtype_as_field('float', 'sem', 'transformation')
+     2.21±0.01ms      2.75±0.01ms     1.24  groupby.GroupByMethods.time_dtype_as_group('float', 'pct_change', 'direct')
+     2.22±0.01ms         2.75±0ms     1.24  groupby.GroupByMethods.time_dtype_as_group('float', 'pct_change', 'transformation')
+      46.5±0.2ms       57.8±0.4ms     1.24  frame_ctor.FromDicts.time_nested_dict
+      53.6±0.6μs       66.5±0.6μs     1.24  indexing.CategoricalIndexIndexing.time_getitem_list_like('monotonic_incr')
+      4.48±0.3ms       5.55±0.2ms     1.24  rolling.ExpandingMethods.time_expanding('Series', 'float', 'min')
+         739±1μs          916±2μs     1.24  groupby.GroupByMethods.time_dtype_as_group('int', 'sum', 'direct')
+      36.5±0.8μs       45.2±0.2μs     1.24  indexing.CategoricalIndexIndexing.time_getitem_slice('monotonic_decr')
+         774±2μs          958±3μs     1.24  groupby.GroupByMethods.time_dtype_as_group('float', 'median', 'direct')
+         765±1μs          946±3μs     1.24  groupby.GroupByMethods.time_dtype_as_group('float', 'mean', 'transformation')
+      12.6±0.3ms      15.5±0.08ms     1.24  io.hdf.HDFStoreDataFrame.time_query_store_table_wide
+      4.47±0.3ms       5.52±0.4ms     1.24  rolling.ExpandingMethods.time_expanding('Series', 'float', 'skew')
+         727±2μs          897±2μs     1.23  groupby.GroupByMethods.time_dtype_as_field('int', 'sum', 'transformation')
+      75.4±0.8ms       93.0±0.2ms     1.23  reshape.Cut.time_qcut_datetime(1000)
+         741±3μs          913±3μs     1.23  groupby.GroupByMethods.time_dtype_as_group('int', 'prod', 'direct')
+         766±3μs          943±2μs     1.23  groupby.GroupByMethods.time_dtype_as_group('float', 'sum', 'transformation')
+         743±2μs          914±1μs     1.23  groupby.GroupByMethods.time_dtype_as_group('int', 'sum', 'transformation')
+         768±2μs          945±2μs     1.23  groupby.GroupByMethods.time_dtype_as_group('float', 'mean', 'direct')
+         777±3μs        957±0.7μs     1.23  groupby.GroupByMethods.time_dtype_as_group('float', 'median', 'transformation')
+         743±2μs          913±1μs     1.23  groupby.GroupByMethods.time_dtype_as_group('int', 'prod', 'transformation')
+     3.31±0.03μs      4.06±0.03μs     1.23  categoricals.Contains.time_categorical_index_contains
+      4.42±0.3ms       5.43±0.4ms     1.23  rolling.Methods.time_rolling('Series', 1000, 'float', 'skew')
+         730±3μs          896±2μs     1.23  groupby.GroupByMethods.time_dtype_as_field('int', 'sum', 'direct')
+         771±5μs          946±2μs     1.23  groupby.GroupByMethods.time_dtype_as_group('float', 'prod', 'direct')
+     2.98±0.02ms      3.65±0.01ms     1.23  rolling.Methods.time_rolling('DataFrame', 10, 'int', 'std')
+         770±3μs        943±0.7μs     1.23  groupby.GroupByMethods.time_dtype_as_group('float', 'prod', 'transformation')
+         156±1ms        191±0.3ms     1.22  inference.ToNumericDowncast.time_downcast('string-float', 'unsigned')
+        1.29±0ms      1.58±0.01ms     1.22  groupby.GroupByMethods.time_dtype_as_field('int', 'sem', 'direct')
+      4.43±0.3ms       5.42±0.4ms     1.22  rolling.Methods.time_rolling('Series', 10, 'float', 'skew')
+        1.29±0ms      1.57±0.01ms     1.22  groupby.GroupByMethods.time_dtype_as_field('int', 'sem', 'transformation')
+         770±9μs          941±2μs     1.22  groupby.GroupByMethods.time_dtype_as_group('float', 'sum', 'direct')
+      4.51±0.3ms       5.51±0.1ms     1.22  rolling.Methods.time_rolling('Series', 1000, 'int', 'max')
+       156±0.9ms        190±0.8ms     1.22  inference.ToNumericDowncast.time_downcast('string-float', 'integer')
+         147±3μs          180±1μs     1.22  indexing.NumericSeriesIndexing.time_getitem_slice(<class 'pandas.core.indexes.numeric.Int64Index'>, 'unique_monotonic_inc')
+       148±0.9μs        181±0.4μs     1.22  indexing.NumericSeriesIndexing.time_getitem_slice(<class 'pandas.core.indexes.numeric.UInt64Index'>, 'unique_monotonic_inc')
+        1.34±0ms      1.63±0.01ms     1.22  groupby.GroupByMethods.time_dtype_as_group('float', 'sem', 'direct')
+      47.3±0.1ms       57.7±0.7ms     1.22  frame_ctor.FromDicts.time_nested_dict_columns
+      4.57±0.3ms       5.57±0.1ms     1.22  rolling.Methods.time_rolling('Series', 1000, 'int', 'min')
+         156±2ms        190±0.4ms     1.22  inference.ToNumericDowncast.time_downcast('string-float', 'signed')
+       674±0.8μs          821±2μs     1.22  groupby.GroupByMethods.time_dtype_as_field('object', 'nunique', 'direct')
+     1.34±0.01ms      1.63±0.01ms     1.22  groupby.GroupByMethods.time_dtype_as_group('float', 'sem', 'transformation')
+         725±9μs          882±3μs     1.22  timeseries.ResetIndex.time_reest_datetimeindex(None)
+     8.02±0.05μs      9.75±0.04μs     1.22  categoricals.Indexing.time_shallow_copy
+       147±0.8μs        179±0.2μs     1.22  indexing.NumericSeriesIndexing.time_getitem_slice(<class 'pandas.core.indexes.numeric.Int64Index'>, 'nonunique_monotonic_inc')
+       148±0.3μs        180±0.3μs     1.22  indexing.NumericSeriesIndexing.time_getitem_slice(<class 'pandas.core.indexes.numeric.UInt64Index'>, 'nonunique_monotonic_inc')
+     1.17±0.02ms      1.41±0.01ms     1.21  indexing.NonNumericSeriesIndexing.time_getitem_label_slice('string', 'nonunique_monotonic_inc')
+     26.3±0.07ms      31.8±0.08ms     1.21  strings.Contains.time_contains(False)
+     3.00±0.01ms      3.62±0.01ms     1.21  rolling.Methods.time_rolling('DataFrame', 1000, 'int', 'std')
+     3.25±0.01ms      3.92±0.02ms     1.21  io.csv.ReadCSVFloatPrecision.time_read_csv(';', '.', 'round_trip')
+     2.99±0.03ms      3.61±0.01ms     1.21  rolling.ExpandingMethods.time_expanding('DataFrame', 'float', 'std')
+       458±0.4μs          553±3μs     1.21  categoricals.Constructor.time_from_codes_all_int8
+         326±4μs          394±7μs     1.21  reindex.Fillna.time_float_32('backfill')
+     3.23±0.01ms       3.90±0.7ms     1.21  rolling.VariableWindowMethods.time_rolling('DataFrame', '50s', 'int', 'sum')
+     3.21±0.02ms       3.88±0.7ms     1.21  rolling.VariableWindowMethods.time_rolling('DataFrame', '1h', 'int', 'sum')
+      66.8±0.6μs         80.5±1μs     1.20  categoricals.IsMonotonic.time_categorical_series_is_monotonic_increasing
+      11.5±0.2μs       13.8±0.7μs     1.20  indexing.CategoricalIndexIndexing.time_get_loc_scalar('monotonic_incr')
+        65.3±1ms         78.4±1ms     1.20  reshape.Cut.time_cut_timedelta(1000)
+     3.21±0.02ms       3.86±0.7ms     1.20  rolling.VariableWindowMethods.time_rolling('DataFrame', '1d', 'int', 'sum')
+     3.26±0.01ms      3.90±0.01ms     1.20  io.csv.ReadCSVFloatPrecision.time_read_csv(',', '.', 'round_trip')
+      67.0±0.6μs         80.0±1μs     1.20  categoricals.IsMonotonic.time_categorical_series_is_monotonic_decreasing
+     1.17±0.04μs      1.40±0.06μs     1.19  index_cached_properties.IndexCache.time_is_monotonic('RangeIndex')
+         942±2μs         1.13±0ms     1.19  groupby.GroupByMethods.time_dtype_as_field('datetime', 'cummin', 'transformation')
+     1.05±0.01ms      1.26±0.02ms     1.19  indexing.NonNumericSeriesIndexing.time_getitem_label_slice('string', 'non_monotonic')
+         943±2μs         1.12±0ms     1.19  groupby.GroupByMethods.time_dtype_as_field('datetime', 'cummin', 'direct')
+        38.3±2μs       45.6±0.4μs     1.19  indexing.CategoricalIndexIndexing.time_getitem_slice('monotonic_incr')
+     3.13±0.01ms      3.72±0.01ms     1.19  rolling.ExpandingMethods.time_expanding('DataFrame', 'int', 'std')
+      3.84±0.1ms       4.56±0.4ms     1.19  stat_ops.SeriesMultiIndexOps.time_op(0, 'mean')
+       473±0.8μs          562±2μs     1.19  timeseries.ToDatetimeCacheSmallCount.time_unique_date_strings(True, 50)
+     5.89±0.02ms      7.00±0.01ms     1.19  timeseries.ResampleSeries.time_resample('period', '5min', 'mean')
+         810±4μs          962±3μs     1.19  groupby.GroupByMethods.time_dtype_as_group('int', 'std', 'direct')
+       472±0.9μs          561±2μs     1.19  timeseries.ToDatetimeCacheSmallCount.time_unique_date_strings(False, 50)
+         811±2μs          962±2μs     1.19  groupby.GroupByMethods.time_dtype_as_group('int', 'std', 'transformation')
+     8.41±0.03μs       9.98±0.1μs     1.19  indexing.NonNumericSeriesIndexing.time_getitem_scalar('datetime', 'non_monotonic')
+      8.18±0.1ms      9.69±0.04ms     1.18  groupby.Apply.time_scalar_function_single_col
+      40.2±0.1μs         47.6±2μs     1.18  ctors.SeriesDtypesConstructors.time_index_from_array_floats
+       175±0.5μs          207±1μs     1.18  series_methods.NanOps.time_func('std', 1000, 'float64')
+     3.47±0.01ms       4.10±0.7ms     1.18  rolling.VariableWindowMethods.time_rolling('DataFrame', '1d', 'int', 'mean')
+     3.52±0.05ms       4.16±0.8ms     1.18  rolling.VariableWindowMethods.time_rolling('DataFrame', '50s', 'int', 'mean')
+     34.0±0.07ms       40.1±0.2ms     1.18  strings.Methods.time_len
+      43.3±0.3ms      51.0±0.08ms     1.18  reshape.Cut.time_cut_datetime(1000)
+      40.8±0.2ms         48.1±1ms     1.18  stat_ops.FrameMultiIndexOps.time_op(0, 'kurt')
+     3.50±0.01ms       4.13±0.7ms     1.18  rolling.VariableWindowMethods.time_rolling('DataFrame', '1h', 'int', 'mean')
+     3.63±0.02ms      4.28±0.04ms     1.18  rolling.Methods.time_rolling('Series', 1000, 'int', 'std')
+         303±4μs          357±5μs     1.18  join_merge.JoinNonUnique.time_join_non_unique_equal
+        38.5±1μs       45.2±0.4μs     1.18  indexing.CategoricalIndexIndexing.time_getitem_slice('non_monotonic')
+     5.97±0.02ms      7.02±0.04ms     1.17  indexing.MultiIndexing.time_index_slice
+      8.42±0.2ms       9.87±0.7ms     1.17  rolling.Methods.time_rolling('Series', 1000, 'int', 'count')
+     3.64±0.05ms      4.27±0.01ms     1.17  rolling.Methods.time_rolling('Series', 10, 'int', 'std')
+      8.45±0.2ms       9.89±0.7ms     1.17  rolling.Methods.time_rolling('Series', 10, 'int', 'count')
+      8.51±0.2ms       9.96±0.7ms     1.17  rolling.Methods.time_rolling('Series', 10, 'float', 'count')
+     1.50±0.04μs      1.76±0.09μs     1.17  index_cached_properties.IndexCache.time_is_monotonic_decreasing('Int64Index')
+     9.20±0.02ms      10.8±0.07ms     1.17  rolling.Pairwise.time_pairwise(None, 'corr', False)
+      8.51±0.2ms       9.95±0.7ms     1.17  rolling.Methods.time_rolling('Series', 1000, 'float', 'count')
+        1.28±0ms         1.49±0ms     1.16  series_methods.Map.time_map('dict', 'category')
+         561±7μs          651±3μs     1.16  timeseries.ToDatetimeCacheSmallCount.time_unique_date_strings(False, 500)
+         705±8ms          819±5ms     1.16  stat_ops.Correlation.time_corr_wide_nans('spearman')
+     4.68±0.02ms       5.43±0.7ms     1.16  rolling.VariableWindowMethods.time_rolling('DataFrame', '50s', 'int', 'kurt')
+         802±3μs         931±30μs     1.16  indexing.NonNumericSeriesIndexing.time_getitem_list_like('datetime', 'nonunique_monotonic_inc')
+         190±5ms          221±4ms     1.16  io.json.ToJSONISO.time_iso_format('records')
+         478±3μs          552±3μs     1.16  strings.Encode.time_encode_decode
+     4.33±0.02ms       5.00±0.7ms     1.15  rolling.VariableWindowMethods.time_rolling('DataFrame', '1d', 'int', 'skew')
+       225±0.5ms          260±2ms     1.15  io.json.ToJSONISO.time_iso_format('columns')
+         974±5μs         1.12±0ms     1.15  groupby.GroupByMethods.time_dtype_as_field('float', 'cumprod', 'transformation')
+        1.20±0ms         1.39±0ms     1.15  groupby.GroupByMethods.time_dtype_as_field('datetime', 'rank', 'direct')
+     7.71±0.01μs      8.89±0.02μs     1.15  dtypes.Dtypes.time_pandas_dtype('Int8')
+     6.32±0.01ms      7.28±0.02ms     1.15  rolling.Pairwise.time_pairwise(None, 'cov', False)
+         220±1μs        254±0.4μs     1.15  indexing.NonNumericSeriesIndexing.time_getitem_label_slice('datetime', 'non_monotonic')
+      21.2±0.1ms       24.4±0.1ms     1.15  reshape.Cut.time_qcut_datetime(10)
+       143±0.4μs        164±0.4μs     1.15  series_methods.NanOps.time_func('std', 1000, 'int64')
+         982±3μs         1.13±0ms     1.15  groupby.GroupByMethods.time_dtype_as_field('float', 'cumsum', 'direct')
+        1.06±0ms      1.22±0.01ms     1.15  groupby.GroupByMethods.time_dtype_as_group('datetime', 'cummin', 'transformation')
+      35.8±0.3ms       41.1±0.7ms     1.15  io.hdf.HDFStoreDataFrame.time_read_store_mixed
+         987±5μs         1.13±0ms     1.15  groupby.GroupByMethods.time_dtype_as_field('float', 'cummax', 'direct')
+         194±4μs          223±3μs     1.15  timeseries.SortIndex.time_get_slice(False)
+        1.20±0ms         1.38±0ms     1.15  groupby.GroupByMethods.time_dtype_as_field('datetime', 'rank', 'transformation')
+         981±3μs         1.12±0ms     1.15  groupby.GroupByMethods.time_dtype_as_field('float', 'cumprod', 'direct')
+     8.08±0.03ms      9.26±0.08ms     1.15  reshape.Cut.time_cut_datetime(4)
+      19.8±0.2ms      22.7±0.07ms     1.15  reshape.Cut.time_qcut_datetime(4)
+         990±1μs         1.13±0ms     1.15  groupby.GroupByMethods.time_dtype_as_field('float', 'cummin', 'direct')
+     1.24±0.04μs      1.43±0.04μs     1.15  index_cached_properties.IndexCache.time_is_monotonic('Int64Index')
+         989±2μs         1.13±0ms     1.15  groupby.GroupByMethods.time_dtype_as_field('float', 'cumsum', 'transformation')
+         550±2ms          630±3ms     1.15  groupby.Groups.time_series_groups('int64_large')
+        1.07±0ms         1.23±0ms     1.15  groupby.GroupByMethods.time_dtype_as_group('float', 'cumsum', 'transformation')
+         989±3μs         1.13±0ms     1.15  groupby.GroupByMethods.time_dtype_as_field('float', 'cummax', 'transformation')
+        1.05±0ms      1.21±0.01ms     1.15  groupby.GroupByMethods.time_dtype_as_field('int', 'cummax', 'transformation')
+         990±5μs         1.13±0ms     1.15  groupby.GroupByMethods.time_dtype_as_field('float', 'cummin', 'transformation')
+     4.62±0.02ms       5.30±0.7ms     1.15  rolling.VariableWindowMethods.time_rolling('DataFrame', '1d', 'int', 'kurt')
+         128±3ms          146±3ms     1.14  io.json.ToJSON.time_to_json('records', 'df_int_floats')
+        1.07±0ms      1.23±0.01ms     1.14  groupby.GroupByMethods.time_dtype_as_group('float', 'cummax', 'direct')
+        1.07±0ms         1.23±0ms     1.14  groupby.GroupByMethods.time_dtype_as_group('float', 'cummin', 'direct')
+       196±0.5μs          224±1μs     1.14  indexing.NonNumericSeriesIndexing.time_getitem_pos_slice('datetime', 'nonunique_monotonic_inc')
+        1.07±0ms         1.23±0ms     1.14  groupby.GroupByMethods.time_dtype_as_group('float', 'cummin', 'transformation')
+        1.06±0ms      1.22±0.01ms     1.14  groupby.GroupByMethods.time_dtype_as_group('datetime', 'cummin', 'direct')
+     4.67±0.02ms       5.34±0.7ms     1.14  rolling.VariableWindowMethods.time_rolling('DataFrame', '1h', 'int', 'kurt')
+     2.61±0.01ms      2.98±0.03ms     1.14  groupby.RankWithTies.time_rank_ties('int64', 'max')
+     2.80±0.01ms      3.21±0.01ms     1.14  ctors.SeriesConstructors.time_series_constructor(<class 'list'>, True, 'int')
+     4.34±0.05ms       4.96±0.8ms     1.14  rolling.VariableWindowMethods.time_rolling('DataFrame', '50s', 'int', 'skew')
+       143±0.2μs        163±0.2μs     1.14  series_methods.NanOps.time_func('std', 1000, 'int32')
+     2.58±0.01ms      2.94±0.01ms     1.14  groupby.RankWithTies.time_rank_ties('float32', 'average')
+       144±0.7μs        164±0.3μs     1.14  series_methods.NanOps.time_func('std', 1000, 'int8')
+        1.08±0ms      1.23±0.01ms     1.14  groupby.GroupByMethods.time_dtype_as_group('float', 'cumsum', 'direct')
+     2.55±0.01ms      2.92±0.01ms     1.14  groupby.RankWithTies.time_rank_ties('float64', 'average')
+     2.55±0.01ms      2.92±0.01ms     1.14  groupby.RankWithTies.time_rank_ties('float64', 'max')
+       128±0.7ms        146±0.5ms     1.14  io.json.ReadJSON.time_read_json('split', 'int')
+        1.05±0ms         1.20±0ms     1.14  groupby.GroupByMethods.time_dtype_as_field('int', 'cummax', 'direct')
+      37.6±0.1ms       42.9±0.1ms     1.14  strings.Methods.time_endswith
+     2.57±0.01ms      2.94±0.01ms     1.14  groupby.RankWithTies.time_rank_ties('float32', 'first')
+        1.08±0ms         1.23±0ms     1.14  groupby.GroupByMethods.time_dtype_as_group('float', 'cummax', 'transformation')
+     2.59±0.02ms      2.95±0.01ms     1.14  groupby.RankWithTies.time_rank_ties('float32', 'dense')
+        2.57±0ms      2.93±0.01ms     1.14  groupby.RankWithTies.time_rank_ties('float32', 'max')
+       196±0.5μs        224±0.3μs     1.14  indexing.NonNumericSeriesIndexing.time_getitem_pos_slice('datetime', 'non_monotonic')
+     8.07±0.02ms      9.20±0.06ms     1.14  sparse.Arithmetic.time_intersect(0.1, nan)
+        1.04±0ms         1.19±0ms     1.14  groupby.GroupByMethods.time_dtype_as_field('int', 'cumsum', 'transformation')
+        1.05±0ms         1.19±0ms     1.14  groupby.GroupByMethods.time_dtype_as_field('int', 'cumsum', 'direct')
+     2.61±0.02ms      2.97±0.01ms     1.14  groupby.RankWithTies.time_rank_ties('int64', 'min')
+     2.55±0.01ms      2.91±0.01ms     1.14  groupby.RankWithTies.time_rank_ties('float64', 'min')
+         189±1ms          215±1ms     1.14  io.json.ToJSONLines.time_float_int_lines
+        1.05±0ms         1.20±0ms     1.14  groupby.GroupByMethods.time_dtype_as_field('int', 'cummin', 'direct')
+     2.77±0.01ms      3.15±0.01ms     1.14  ctors.SeriesConstructors.time_series_constructor(<class 'list'>, False, 'int')
+     3.78±0.03ms      4.30±0.04ms     1.14  ctors.SeriesConstructors.time_series_constructor(<function arr_dict at 0x7f6536433620>, False, 'float')
+         238±2μs        271±0.4μs     1.14  indexing.NonNumericSeriesIndexing.time_getitem_label_slice('datetime', 'nonunique_monotonic_inc')
+     9.28±0.03ms      10.6±0.02ms     1.14  rolling.Pairwise.time_pairwise(1000, 'corr', False)
+     2.58±0.01ms      2.93±0.02ms     1.14  groupby.RankWithTies.time_rank_ties('float32', 'min')
+        1.06±0ms         1.20±0ms     1.14  groupby.GroupByMethods.time_dtype_as_group('int', 'cumsum', 'transformation')
+     2.61±0.01ms      2.96±0.01ms     1.14  groupby.RankWithTies.time_rank_ties('int64', 'average')
+        1.17±0ms         1.33±0ms     1.14  series_methods.Map.time_map('dict', 'int')
+        1.46±0ms      1.65±0.01ms     1.14  groupby.GroupByMethods.time_dtype_as_group('int', 'sem', 'transformation')
+        1.06±0ms         1.21±0ms     1.14  groupby.GroupByMethods.time_dtype_as_group('int', 'cummin', 'transformation')
+        1.06±0ms         1.20±0ms     1.14  groupby.GroupByMethods.time_dtype_as_group('int', 'cumsum', 'direct')
+     6.37±0.02ms      7.23±0.01ms     1.14  rolling.Pairwise.time_pairwise(1000, 'cov', False)
+     2.59±0.01ms      2.94±0.01ms     1.14  groupby.RankWithTies.time_rank_ties('datetime64', 'min')
+        1.06±0ms         1.21±0ms     1.14  groupby.GroupByMethods.time_dtype_as_group('int', 'cummax', 'transformation')
+        1.06±0ms         1.21±0ms     1.14  groupby.GroupByMethods.time_dtype_as_group('int', 'cummin', 'direct')
+       133±0.8ms        151±0.7ms     1.14  io.json.ReadJSON.time_read_json('split', 'datetime')
+        1.06±0ms         1.21±0ms     1.13  groupby.GroupByMethods.time_dtype_as_group('int', 'cummax', 'direct')
+     4.00±0.03ms      4.54±0.04ms     1.13  ctors.SeriesConstructors.time_series_constructor(<function arr_dict at 0x7f6536433620>, True, 'float')
+     31.8±0.01ms      36.1±0.07ms     1.13  frame_methods.Equals.time_frame_nonunique_unequal
+     2.59±0.01ms         2.93±0ms     1.13  groupby.RankWithTies.time_rank_ties('datetime64', 'max')
+     9.24±0.02ms      10.5±0.02ms     1.13  rolling.Pairwise.time_pairwise(10, 'corr', False)
+     2.59±0.01ms      2.93±0.01ms     1.13  groupby.RankWithTies.time_rank_ties('datetime64', 'dense')
+       227±0.8μs          257±1μs     1.13  indexing.NonNumericSeriesIndexing.time_getitem_pos_slice('datetime', 'unique_monotonic_inc')
+     2.33±0.01ms      2.64±0.01ms     1.13  io.csv.ReadCSVFloatPrecision.time_read_csv(';', '.', 'high')
+     2.58±0.01ms      2.92±0.01ms     1.13  groupby.RankWithTies.time_rank_ties('float64', 'dense')
+        1.36±0ms         1.54±0ms     1.13  groupby.GroupByMethods.time_dtype_as_field('float', 'rank', 'direct')
+     31.8±0.06ms      36.0±0.03ms     1.13  frame_methods.Equals.time_frame_nonunique_equal
+         226±7μs          256±1μs     1.13  timeseries.SortIndex.time_get_slice(True)
+     2.59±0.01ms      2.93±0.02ms     1.13  groupby.RankWithTies.time_rank_ties('datetime64', 'average')
+        1.06±0ms         1.20±0ms     1.13  groupby.GroupByMethods.time_dtype_as_field('int', 'cummin', 'transformation')
+        1.40±0ms      1.58±0.01ms     1.13  groupby.GroupByMethods.time_dtype_as_group('int', 'rank', 'direct')
+     2.62±0.01ms      2.96±0.01ms     1.13  groupby.RankWithTies.time_rank_ties('int64', 'dense')
+     9.41±0.03ms       10.6±0.1ms     1.13  reshape.Cut.time_cut_datetime(10)
+     2.62±0.01ms      2.96±0.01ms     1.13  groupby.RankWithTies.time_rank_ties('int64', 'first')
+        1.40±0ms         1.58±0ms     1.13  groupby.GroupByMethods.time_dtype_as_group('int', 'rank', 'transformation')
+        1.36±0ms         1.54±0ms     1.13  groupby.GroupByMethods.time_dtype_as_field('float', 'rank', 'transformation')
+      6.93±0.1μs       7.82±0.2μs     1.13  index_cached_properties.IndexCache.time_engine('DatetimeIndex')
+     2.33±0.01ms      2.63±0.01ms     1.13  io.csv.ReadCSVFloatPrecision.time_read_csv(',', '.', 'high')
+        1.41±0ms         1.59±0ms     1.13  groupby.GroupByMethods.time_dtype_as_group('float', 'rank', 'transformation')
+        1.40±0ms      1.58±0.01ms     1.13  groupby.GroupByMethods.time_dtype_as_group('datetime', 'rank', 'transformation')
+        1.40±0ms         1.58±0ms     1.13  groupby.GroupByMethods.time_dtype_as_group('datetime', 'rank', 'direct')
+     2.42±0.02ms      2.73±0.01ms     1.13  io.csv.ReadCSVFloatPrecision.time_read_csv(';', '.', None)
+     1.46±0.01ms      1.64±0.01ms     1.13  groupby.GroupByMethods.time_dtype_as_group('int', 'sem', 'direct')
+         159±4ms          179±4ms     1.13  io.json.ToJSON.time_to_json('index', 'df_int_floats')
+       183±0.5ms          207±2ms     1.13  io.json.ToJSONISO.time_iso_format('values')
+         294±2μs          332±3μs     1.13  inference.NumericInferOps.time_multiply(<class 'numpy.int8'>)
+     7.28±0.04ms      8.19±0.01ms     1.13  io.sas.SAS.time_read_sas('xport')
+     2.42±0.01ms      2.73±0.01ms     1.13  io.csv.ReadCSVFloatPrecision.time_read_csv(',', '.', None)
+        1.39±0ms         1.56±0ms     1.13  groupby.GroupByMethods.time_dtype_as_field('int', 'rank', 'transformation')
+        1.42±0ms         1.59±0ms     1.13  groupby.GroupByMethods.time_dtype_as_group('float', 'rank', 'direct')
+         224±5ms          252±4ms     1.13  io.json.ToJSONISO.time_iso_format('split')
+        692±10μs         779±20μs     1.13  inference.NumericInferOps.time_multiply(<class 'numpy.float32'>)
+     2.13±0.01ms         2.39±0ms     1.12  series_methods.Map.time_map('dict', 'object')
+     3.66±0.01ms      4.11±0.01ms     1.12  io.csv.ReadCSVParseDates.time_multiple_date
+        1.39±0ms         1.56±0ms     1.12  groupby.GroupByMethods.time_dtype_as_field('int', 'rank', 'direct')
+        86.7±1ms         97.3±2ms     1.12  frame_ctor.FromRecords.time_frame_from_records_generator(None)
+         646±5ms          726±2ms     1.12  groupby.Groups.time_series_groups('object_large')
+         126±3ms          141±3ms     1.12  io.json.ToJSON.time_to_json('records', 'df_int_float_str')
+     3.01±0.01ms      3.38±0.02ms     1.12  io.csv.ReadCSVParseDates.time_baseline
+         291±1μs          327±2μs     1.12  inference.NumericInferOps.time_add(<class 'numpy.int8'>)
+     8.08±0.01ms      9.05±0.09ms     1.12  sparse.Arithmetic.time_intersect(0.01, nan)
+      38.0±0.3ms      42.6±0.07ms     1.12  strings.Methods.time_startswith
+     21.2±0.03ms      23.7±0.04ms     1.12  io.csv.ReadCSVConcatDatetimeBadDateValue.time_read_csv('nan')
+     19.3±0.09ms       21.6±0.1ms     1.12  io.csv.ReadCSVConcatDatetimeBadDateValue.time_read_csv('')
+         188±1ms          211±2ms     1.12  io.json.ToJSONLines.time_float_int_str_lines
+         539±3μs          603±1μs     1.12  series_methods.Map.time_map('Series', 'category')
+         288±1μs          323±2μs     1.12  inference.NumericInferOps.time_subtract(<class 'numpy.int8'>)
+       291±0.8μs          325±2μs     1.12  inference.NumericInferOps.time_subtract(<class 'numpy.uint8'>)
+     6.43±0.02ms      7.19±0.02ms     1.12  rolling.Pairwise.time_pairwise(10, 'cov', False)
+       269±0.7μs          301±2μs     1.12  indexing.NonNumericSeriesIndexing.time_getitem_label_slice('datetime', 'unique_monotonic_inc')
+         292±1μs          326±1μs     1.12  inference.NumericInferOps.time_add(<class 'numpy.uint8'>)
+       296±0.7μs          330±1μs     1.11  inference.NumericInferOps.time_multiply(<class 'numpy.uint8'>)
+      8.85±0.3ms       9.86±0.5ms     1.11  timeseries.ResampleSeries.time_resample('datetime', '5min', 'ohlc')
+         178±2ms        198±0.1ms     1.11  frame_ctor.FromDicts.time_nested_dict_int64
+     13.5±0.04μs       15.1±0.4μs     1.11  indexing.NonNumericSeriesIndexing.time_getitem_scalar('datetime', 'nonunique_monotonic_inc')
+      29.0±0.2ms       32.3±0.3ms     1.11  frame_ctor.FromLists.time_frame_from_lists
+     3.09±0.05ms      3.43±0.03ms     1.11  rolling.VariableWindowMethods.time_rolling('DataFrame', '1h', 'float', 'sum')
+     8.93±0.06μs       9.92±0.1μs     1.11  dtypes.Dtypes.time_pandas_dtype('Int16')
+         398±3μs          442±3μs     1.11  inference.NumericInferOps.time_subtract(<class 'numpy.int16'>)
+         244±6ms          270±5ms     1.11  io.json.ToJSONISO.time_iso_format('index')
+      28.4±0.3ms       31.4±0.1ms     1.11  groupby.AggFunctions.time_different_python_functions_multicol
+     5.50±0.03ms      6.08±0.04ms     1.11  ctors.SeriesConstructors.time_series_constructor(<function arr_dict at 0x7f6536433620>, False, 'int')
+     11.2±0.03ms      12.4±0.05ms     1.11  io.hdf.HDFStoreDataFrame.time_query_store_table
+      47.8±0.2μs       52.8±0.3μs     1.10  indexing.NonNumericSeriesIndexing.time_getitem_scalar('period', 'non_monotonic')
+       227±0.7ms          251±1ms     1.10  strings.Slice.time_vector_slice
+     2.78±0.02ms      3.08±0.03ms     1.10  io.csv.ReadCSVFloatPrecision.time_read_csv(';', '_', 'round_trip')
+         399±3μs          441±9μs     1.10  inference.NumericInferOps.time_add(<class 'numpy.uint16'>)
+         2.23±0s          2.46±0s     1.10  groupby.GroupByMethods.time_dtype_as_field('float', 'describe', 'transformation')
+         192±2ms          212±2ms     1.10  io.stata.Stata.time_write_stata('tc')
+     3.10±0.03ms      3.42±0.03ms     1.10  rolling.VariableWindowMethods.time_rolling('DataFrame', '50s', 'float', 'sum')
+     5.74±0.03ms      6.32±0.04ms     1.10  ctors.SeriesConstructors.time_series_constructor(<function arr_dict at 0x7f6536433620>, True, 'int')
+         2.23±0s       2.46±0.01s     1.10  groupby.GroupByMethods.time_dtype_as_field('float', 'describe', 'direct')
+            105M             115M     1.10  rolling.PeakMemFixed.peakmem_fixed
+     2.79±0.01ms      3.07±0.02ms     1.10  io.csv.ReadCSVFloatPrecision.time_read_csv(',', '_', None)
+         3.13±0s          3.44±0s     1.10  groupby.GroupByMethods.time_dtype_as_group('int', 'describe', 'direct')
+     6.05±0.02ms      6.66±0.02ms     1.10  reshape.SimpleReshape.time_stack
+         405±2μs          446±7μs     1.10  inference.NumericInferOps.time_multiply(<class 'numpy.int16'>)
+         2.12±0s          2.33±0s     1.10  groupby.GroupByMethods.time_dtype_as_field('int', 'describe', 'direct')
+         251±3ms          276±5ms     1.10  io.stata.StataMissing.time_write_stata('tc')
+      18.4±0.2ms      20.2±0.06ms     1.10  reshape.Cut.time_qcut_timedelta(4)
+     2.77±0.01ms      3.05±0.01ms     1.10  io.csv.ReadCSVFloatPrecision.time_read_csv(';', '_', None)
+         3.13±0s          3.44±0s     1.10  groupby.GroupByMethods.time_dtype_as_group('int', 'describe', 'transformation')
-      1.10±0.01s          996±6ms     0.91  reshape.Unstack.time_without_last_row('category')
-      16.9±0.1ms      15.4±0.06ms     0.91  frame_methods.Apply.time_apply_lambda_mean
-         262±1μs        238±0.3μs     0.91  indexing.CategoricalIndexIndexing.time_getitem_bool_array('monotonic_decr')
-     3.97±0.01ms         3.59±0ms     0.91  offset.OffsetSeriesArithmetic.time_add_offset(<SemiMonthBegin: day_of_month=15>)
-      3.71±0.2μs       3.36±0.1μs     0.90  index_cached_properties.IndexCache.time_inferred_type('IntervalIndex')
-      16.7±0.9ms      15.0±0.07ms     0.90  stat_ops.Rank.time_average_old('DataFrame', False)
-         117±1ms        106±0.6ms     0.90  io.json.ToJSON.time_to_json('split', 'df_date_idx')
-      7.54±0.6μs       6.78±0.2μs     0.90  index_cached_properties.IndexCache.time_shape('TimedeltaIndex')
-     5.96±0.03ms       5.35±0.1ms     0.90  frame_methods.Interpolate.time_interpolate_some_good('infer')
-     4.43±0.05μs      3.98±0.01μs     0.90  series_methods.SeriesGetattr.time_series_datetimeindex_repr
-         186±6ms          167±1ms     0.90  categoricals.Rank.time_rank_string
-      78.7±0.3ms       70.3±0.3ms     0.89  rolling.Apply.time_rolling('Series', 3, 'int', <built-in function sum>, False)
-      84.0±0.6ms       74.9±0.5ms     0.89  binary_ops.Ops.time_frame_comparison(False, 1)
-      84.6±0.9ms         75.4±1ms     0.89  binary_ops.Ops.time_frame_comparison(False, 'default')
-        74.2±2ms       66.1±0.3ms     0.89  rolling.Apply.time_rolling('Series', 300, 'int', <built-in function sum>, False)
-         169±1μs        151±0.9μs     0.89  frame_methods.Dtypes.time_frame_dtypes
-      98.6±0.7μs       87.6±0.8μs     0.89  series_methods.NanOps.time_func('argmax', 1000, 'float64')
-      79.7±0.4ms       70.7±0.2ms     0.89  rolling.Apply.time_rolling('DataFrame', 3, 'int', <built-in function sum>, False)
-      79.5±0.4ms       70.5±0.3ms     0.89  rolling.Apply.time_rolling('DataFrame', 3, 'float', <built-in function sum>, False)
-        75.1±2ms       66.6±0.2ms     0.89  rolling.Apply.time_rolling('DataFrame', 300, 'float', <built-in function sum>, False)
-      12.5±0.5ms       11.1±0.3ms     0.88  categoricals.Rank.time_rank_string_cat
-      79.1±0.8ms       69.9±0.1ms     0.88  rolling.Apply.time_rolling('Series', 3, 'float', <built-in function sum>, False)
-     3.71±0.02μs      3.27±0.03μs     0.88  dtypes.DtypesInvalid.time_pandas_dtype_invalid('scalar-int')
-        74.5±2ms       65.6±0.2ms     0.88  rolling.Apply.time_rolling('Series', 300, 'float', <built-in function sum>, False)
-      52.6±0.2μs       46.3±0.1μs     0.88  timedelta.TimedeltaIndexing.time_series_loc
-        75.6±2ms      66.4±0.08ms     0.88  rolling.Apply.time_rolling('DataFrame', 300, 'int', <built-in function sum>, False)
-     3.50±0.02ms      3.06±0.01ms     0.88  offset.OffsetSeriesArithmetic.time_add_offset(<BusinessDay>)
-     5.17±0.02ms      4.50±0.03ms     0.87  timeseries.ResampleSeries.time_resample('datetime', '1D', 'mean')
-     1.77±0.01ms         1.54±0ms     0.87  timeseries.ToDatetimeCacheSmallCount.time_unique_date_strings(True, 5000)
-      3.93±0.1μs      3.40±0.09μs     0.87  index_cached_properties.IndexCache.time_shape('PeriodIndex')
-      6.49±0.2μs       5.61±0.1μs     0.87  index_object.Indexing.time_get_loc('Int')
-      26.4±0.7μs       22.8±0.2μs     0.86  series_methods.SearchSorted.time_searchsorted('int32')
-     2.91±0.01ms      2.51±0.01ms     0.86  sparse.FromCoo.time_sparse_series_from_coo
-     6.52±0.03μs      5.62±0.04μs     0.86  index_object.Indexing.time_get_loc_sorted('Int')
-         920±2μs          793±1μs     0.86  frame_methods.Iteration.time_itertuples_raw_start
-         621±2μs          535±2μs     0.86  groupby.GroupByMethods.time_dtype_as_field('datetime', 'tail', 'direct')
-      26.5±0.7μs       22.9±0.4μs     0.86  series_methods.SearchSorted.time_searchsorted('int64')
-         274±2ms          235±2ms     0.86  io.json.ToJSON.time_to_json_wide('index', 'df_td_int_ts')
-         927±1μs          797±2μs     0.86  frame_methods.Iteration.time_itertuples_raw_read_first
-      26.1±0.3μs       22.4±0.2μs     0.86  series_methods.SearchSorted.time_searchsorted('uint8')
-         772±2μs          662±1μs     0.86  timeseries.ToDatetimeCacheSmallCount.time_unique_date_strings(True, 500)
-         597±2μs          512±2μs     0.86  groupby.GroupByMethods.time_dtype_as_field('datetime', 'head', 'direct')
-         622±2μs          532±1μs     0.86  groupby.GroupByMethods.time_dtype_as_field('datetime', 'tail', 'transformation')
-         600±2μs          513±2μs     0.85  groupby.GroupByMethods.time_dtype_as_field('datetime', 'head', 'transformation')
-      26.4±0.6μs       22.5±0.3μs     0.85  series_methods.SearchSorted.time_searchsorted('int8')
-      9.52±0.5μs       8.12±0.1μs     0.85  algorithms.DuplicatedUniqueIndex.time_duplicated_unique('float')
-         270±1ms          230±1ms     0.85  io.csv.ToCSV.time_frame('long')
-         273±2ms          233±2ms     0.85  io.json.ToJSON.time_to_json_wide('records', 'df_td_int_ts')
-         180±3ms          153±2ms     0.85  io.json.ToJSON.time_to_json('index', 'df_td_int_ts')
-      26.1±0.3μs       22.1±0.4μs     0.85  series_methods.SearchSorted.time_searchsorted('uint16')
-      26.8±0.3μs       22.7±0.1μs     0.85  series_methods.SearchSorted.time_searchsorted('int16')
-         152±1ms          128±2ms     0.85  io.json.ToJSON.time_to_json('records', 'df_td_int_ts')
-     9.50±0.03μs      8.04±0.06μs     0.85  algorithms.DuplicatedUniqueIndex.time_duplicated_unique('int')
-      26.5±0.3μs      22.3±0.09μs     0.84  series_methods.SearchSorted.time_searchsorted('uint32')
-      29.5±0.6μs       24.8±0.3μs     0.84  series_methods.SearchSorted.time_searchsorted('uint64')
-     4.61±0.04ms      3.84±0.02ms     0.83  timeseries.ResampleDatetetime64.time_resample
-      9.74±0.9μs       8.11±0.1μs     0.83  algorithms.DuplicatedUniqueIndex.time_duplicated_unique('string')
-     9.90±0.03ms      8.15±0.01ms     0.82  inference.DateInferOps.time_add_timedeltas
-       286±0.7ms        235±0.9ms     0.82  frame_methods.Apply.time_apply_user_func
-        70.4±3ms         57.9±1ms     0.82  plotting.SeriesPlotting.time_series_plot('line')
-         526±2ms        432±0.7ms     0.82  frame_methods.Nunique.time_frame_nunique
-       294±0.6ms          242±3ms     0.82  frame_methods.Duplicated.time_frame_duplicated_wide
-         256±2ms        210±0.4ms     0.82  io.json.ToJSON.time_to_json_wide('split', 'df_td_int_ts')
-     3.46±0.02ms      2.84±0.03ms     0.82  frame_methods.Interpolate.time_interpolate_some_good(None)
-     4.10±0.04ms      3.35±0.01ms     0.82  groupby.Datelike.time_sum('date_range')
-         256±1ms          209±2ms     0.82  io.json.ToJSON.time_to_json_wide('values', 'df_td_int_ts')
-        199±20ms        161±0.4ms     0.81  algorithms.Factorize.time_factorize(True, 'string')
-      10.3±0.2ms      8.36±0.02ms     0.81  inference.DateInferOps.time_subtract_datetimes
-       216±0.8μs        175±0.7μs     0.81  period.Indexing.time_unique
-      47.4±0.1μs       38.2±0.3μs     0.81  series_methods.NanOps.time_func('argmax', 1000, 'int64')
-         246±1ms        198±0.8ms     0.80  frame_methods.Interpolate.time_interpolate('infer')
-     7.62±0.01ms      6.10±0.05ms     0.80  io.hdf.HDFStoreDataFrame.time_store_info
-     34.0±0.08ms      27.2±0.05ms     0.80  io.csv.ToCSV.time_frame('mixed')
-      47.2±0.2μs       37.5±0.1μs     0.80  series_methods.NanOps.time_func('argmax', 1000, 'int8')
-      47.4±0.2μs       37.6±0.2μs     0.79  series_methods.NanOps.time_func('argmax', 1000, 'int32')
-     10.5±0.05ms      8.28±0.01ms     0.79  reindex.DropDuplicates.time_frame_drop_dups(True)
-         160±4ms          126±4ms     0.79  io.json.ToJSON.time_to_json('columns', 'df_td_int_ts')
-         188±2ms          148±2ms     0.79  frame_methods.Interpolate.time_interpolate(None)
-      21.1±0.4ms         16.6±1ms     0.78  algorithms.FactorizeUnique.time_factorize(False, 'string')
-     12.0±0.04ms      9.33±0.02ms     0.78  reindex.DropDuplicates.time_frame_drop_dups_na(True)
-         316±1μs          242±2μs     0.76  index_object.SetOperations.time_operation('datetime', 'union')
-     2.34±0.02ms      1.78±0.01ms     0.76  categoricals.CategoricalSlicing.time_getitem_bool_array('monotonic_incr')
-     2.36±0.01ms      1.79±0.01ms     0.76  categoricals.CategoricalSlicing.time_getitem_bool_array('monotonic_decr')
-      14.2±0.2μs      10.7±0.08μs     0.76  timeseries.AsOf.time_asof_single_early('Series')
-      15.1±0.1ms       11.4±0.1ms     0.76  io.csv.ToCSVDatetime.time_frame_date_formatting
-      15.3±0.2μs       11.5±0.2μs     0.75  timeseries.DatetimeIndex.time_get('tz_aware')
-         621±2ms        466±0.8ms     0.75  package.TimeImport.time_import
-       243±0.9μs        181±0.7μs     0.74  timeseries.DatetimeIndex.time_unique('dst')
-     2.68±0.01ms      1.98±0.01ms     0.74  timeseries.ResampleDataFrame.time_method('mean')
-        60.7±2ms       44.5±0.1ms     0.73  io.hdf.HDFStoreDataFrame.time_write_store_table_wide
-         919±5ns         667±20ns     0.73  timedelta.TimedeltaIndexing.time_shape
-     1.29±0.01ms          931±1μs     0.72  offset.OffsetSeriesArithmetic.time_add_offset(<DateOffset: days=2, months=2>)
-      9.40±0.1μs       6.70±0.3μs     0.71  timedelta.TimedeltaIndexing.time_get_loc
-        935±10ns          658±6ns     0.70  period.Indexing.time_shape
-         497±3ms          349±2ms     0.70  groupby.GroupByMethods.time_dtype_as_group('float', 'unique', 'direct')
-         502±5ms          351±3ms     0.70  groupby.GroupByMethods.time_dtype_as_group('float', 'unique', 'transformation')
-         224±3ms        156±0.9ms     0.70  groupby.GroupByMethods.time_dtype_as_field('float', 'unique', 'transformation')
-         218±2ms          151±1ms     0.69  groupby.GroupByMethods.time_dtype_as_field('int', 'unique', 'direct')
-         505±4ms          350±2ms     0.69  groupby.GroupByMethods.time_dtype_as_group('datetime', 'unique', 'direct')
-     11.2±0.08μs      7.76±0.05μs     0.69  timedelta.TimedeltaIndexing.time_shallow_copy
-         219±2ms        151±0.6ms     0.69  groupby.GroupByMethods.time_dtype_as_field('int', 'unique', 'transformation')
-         506±2ms          350±2ms     0.69  groupby.GroupByMethods.time_dtype_as_group('datetime', 'unique', 'transformation')
-         227±9ms        157±0.7ms     0.69  groupby.GroupByMethods.time_dtype_as_field('float', 'unique', 'direct')
-         325±3ms        223±0.6ms     0.69  groupby.GroupByMethods.time_dtype_as_group('int', 'unique', 'direct')
-       139±0.8ms       95.2±0.6ms     0.68  io.json.ToJSON.time_to_json('values', 'df_td_int_ts')
-        30.9±1ms       21.1±0.6ms     0.68  algorithms.Duplicated.time_duplicated(False, 'string')
-      31.5±0.2ms      21.5±0.06ms     0.68  stat_ops.Correlation.time_corrwith_cols('pearson')
-         331±6ms          225±1ms     0.68  groupby.GroupByMethods.time_dtype_as_group('int', 'unique', 'transformation')
-        12.0±4μs      8.08±0.05μs     0.68  algorithms.DuplicatedUniqueIndex.time_duplicated_unique('uint')
-     1.06±0.01ms          709±3μs     0.67  offset.OffsetSeriesArithmetic.time_add_offset(<BusinessMonthEnd>)
-        1.07±0ms          709±5μs     0.67  offset.OffsetSeriesArithmetic.time_add_offset(<BusinessYearEnd: month=12>)
-        1.06±0ms          702±3μs     0.66  offset.OffsetSeriesArithmetic.time_add_offset(<BusinessQuarterEnd: startingMonth=3>)
-        45.9±4ms       30.4±0.1ms     0.66  algorithms.Factorize.time_factorize(False, 'string')
-     1.03±0.01ms          681±2μs     0.66  offset.OffsetSeriesArithmetic.time_add_offset(<BusinessQuarterBegin: startingMonth=3>)
-        1.04±0ms          687±2μs     0.66  offset.OffsetSeriesArithmetic.time_add_offset(<YearEnd: month=12>)
-         163±1ms          107±1ms     0.66  io.json.ToJSON.time_to_json('split', 'df_td_int_ts')
-        1.03±0ms          678±1μs     0.66  offset.OffsetSeriesArithmetic.time_add_offset(<BusinessYearBegin: month=1>)
-        1.03±0ms          676±3μs     0.65  offset.OffsetSeriesArithmetic.time_add_offset(<QuarterEnd: startingMonth=3>)
-        1.03±0ms          670±1μs     0.65  offset.OffsetSeriesArithmetic.time_add_offset(<BusinessMonthBegin>)
-        1.03±0ms          671±4μs     0.65  offset.OffsetSeriesArithmetic.time_add_offset(<MonthEnd>)
-         255±1ms        167±0.6ms     0.65  groupby.GroupByMethods.time_dtype_as_field('object', 'unique', 'direct')
-        1.02±0ms        662±0.7μs     0.65  offset.OffsetSeriesArithmetic.time_add_offset(<QuarterBegin: startingMonth=3>)
-        1.01±0ms          659±5μs     0.65  offset.OffsetSeriesArithmetic.time_add_offset(<YearBegin: month=1>)
-     1.01±0.01ms          652±1μs     0.65  offset.OffsetSeriesArithmetic.time_add_offset(<MonthBegin>)
-         258±2ms          166±1ms     0.64  groupby.GroupByMethods.time_dtype_as_field('object', 'unique', 'transformation')
-         252±2ms          163±1ms     0.64  eval.Eval.time_and('python', 'all')
-            206M             133M     0.64  reshape.Cut.peakmem_cut_interval(10)
-            206M             133M     0.64  reshape.Cut.peakmem_cut_interval(4)
-            207M             133M     0.64  reshape.Cut.peakmem_cut_interval(1000)
-     4.76±0.02ms      3.03±0.01ms     0.64  timeseries.ResampleDataFrame.time_method('min')
-         983±2ms          618±1ms     0.63  io.json.ReadJSON.time_read_json('index', 'datetime')
-        1.02±0ms          640±2μs     0.63  offset.OffsetSeriesArithmetic.time_add_offset(<Day>)
-        3.87±0ms      2.41±0.01ms     0.62  index_object.SetOperations.time_operation('datetime', 'intersection')
-         150±4ms         92.7±4ms     0.62  binary_ops.Ops.time_frame_multi_and(False, 'default')
-         151±4ms         92.9±3ms     0.62  binary_ops.Ops.time_frame_multi_and(False, 1)
-         263±2ms          162±1ms     0.62  eval.Eval.time_and('python', 1)
-     1.92±0.05ms      1.18±0.06ms     0.62  reindex.LevelAlign.time_align_level
-     8.72±0.08μs      5.35±0.03μs     0.61  timeseries.DatetimeIndex.time_get('repeated')
-       191±0.6μs        117±0.5μs     0.61  timedelta.TimedeltaIndexing.time_unique
-      22.7±0.2ms      13.8±0.06ms     0.61  algorithms.Duplicated.time_duplicated('last', 'string')
-      1.12±0.01s          679±1ms     0.60  io.json.ReadJSON.time_read_json('index', 'int')
-     8.52±0.07μs      5.14±0.02μs     0.60  timeseries.DatetimeIndex.time_get('tz_naive')
-     4.75±0.01ms         2.86±0ms     0.60  timeseries.ResampleDataFrame.time_method('max')
-     8.49±0.05μs      5.12±0.02μs     0.60  timeseries.DatetimeIndex.time_get('dst')
-      22.8±0.3ms      13.7±0.02ms     0.60  algorithms.Duplicated.time_duplicated('first', 'string')
-         149±4ms         87.2±3ms     0.59  binary_ops.Ops.time_frame_multi_and(True, 'default')
-         160±4ms         93.6±3ms     0.59  binary_ops.Ops.time_frame_multi_and(True, 1)
-        1.95±0ms         1.12±0ms     0.57  groupby.GroupByMethods.time_dtype_as_group('object', 'unique', 'direct')
-     1.95±0.01ms         1.11±0ms     0.57  groupby.GroupByMethods.time_dtype_as_group('object', 'unique', 'transformation')
-     2.10±0.06ms      1.20±0.06ms     0.57  reindex.LevelAlign.time_reindex_level
-         652±1ms          348±1ms     0.53  stat_ops.Correlation.time_corrwith_rows('pearson')
-     1.83±0.03ms          949±8μs     0.52  replace.FillNa.time_replace(True)
-      10.0±0.5ms       5.06±0.8ms     0.50  binary_ops.Timeseries.time_timestamp_ops_diff('US/Eastern')
-        184±10ms         89.7±1ms     0.49  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function pow>)
-         128±1ms       61.4±0.5ms     0.48  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function floordiv>)
-        197±20ms         93.4±4ms     0.47  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function pow>)
-         124±2ms       58.6±0.5ms     0.47  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function floordiv>)
-      9.59±0.4ms       4.51±0.1ms     0.47  rolling.EWMMethods.time_ewm('Series', 10, 'int', 'mean')
-         125±1ms       58.7±0.5ms     0.47  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function floordiv>)
-         126±2ms       59.0±0.5ms     0.47  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function floordiv>)
-         133±1ms       61.2±0.7ms     0.46  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function floordiv>)
-        202±10ms         92.7±4ms     0.46  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function pow>)
-         132±1ms       60.3±0.5ms     0.46  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function floordiv>)
-      9.37±0.4ms       4.26±0.1ms     0.45  rolling.EWMMethods.time_ewm('Series', 10, 'float', 'mean')
-      9.59±0.4ms       4.35±0.1ms     0.45  rolling.EWMMethods.time_ewm('Series', 1000, 'int', 'mean')
-      9.43±0.3ms       4.25±0.1ms     0.45  rolling.EWMMethods.time_ewm('Series', 1000, 'float', 'mean')
-         127±1ms       55.9±0.4ms     0.44  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function floordiv>)
-         128±1ms       56.1±0.5ms     0.44  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function floordiv>)
-       126±0.9μs      53.9±0.09μs     0.43  categoricals.CategoricalOps.time_categorical_op('__eq__')
-       127±0.6μs       54.3±0.2μs     0.43  categoricals.CategoricalOps.time_categorical_op('__gt__')
-       127±0.9μs       54.3±0.3μs     0.43  categoricals.CategoricalOps.time_categorical_op('__ge__')
-      75.5±0.5ms       27.1±0.6ms     0.36  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function mod>)
-     7.66±0.01ms      2.74±0.06ms     0.36  rolling.EWMMethods.time_ewm('DataFrame', 10, 'int', 'mean')
-       114±0.4ms      40.6±0.02ms     0.36  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function mod>)
-     5.33±0.07ms         1.87±0ms     0.35  series_methods.Dir.time_dir_strings
-      77.0±0.6ms       27.0±0.7ms     0.35  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function mod>)
-     7.67±0.03ms      2.69±0.02ms     0.35  rolling.EWMMethods.time_ewm('DataFrame', 1000, 'int', 'mean')
-         114±1ms      39.7±0.03ms     0.35  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function mod>)
-      93.1±0.9ms      32.0±0.06ms     0.34  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function mod>)
-      86.7±0.7ms      29.5±0.03ms     0.34  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function mod>)
-      86.9±0.9ms      29.5±0.04ms     0.34  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function mod>)
-     7.52±0.02ms      2.55±0.01ms     0.34  rolling.EWMMethods.time_ewm('DataFrame', 10, 'float', 'mean')
-     7.53±0.02ms      2.54±0.01ms     0.34  rolling.EWMMethods.time_ewm('DataFrame', 1000, 'float', 'mean')
-      88.8±0.7ms      29.7±0.01ms     0.33  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function mod>)
-      3.40±0.02s       1.08±0.01s     0.32  reshape.Cut.time_cut_interval(1000)
-         105±4ms       32.9±0.5ms     0.31  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function pow>)
-         333±4ms        102±0.2ms     0.31  binary_ops.Ops2.time_frame_float_div_by_zero
-       336±0.9ms        103±0.4ms     0.31  binary_ops.Ops2.time_frame_int_div_by_zero
-        97.8±1ms       29.5±0.4ms     0.30  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function pow>)
-        97.5±1ms       29.4±0.3ms     0.30  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function pow>)
-      2.91±0.01s         792±10ms     0.27  reshape.Cut.time_cut_interval(4)
-      2.98±0.03s          803±7ms     0.27  reshape.Cut.time_cut_interval(10)
-      96.2±0.8ms       25.3±0.7ms     0.26  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function pow>)
-      19.4±0.7ms       4.87±0.3ms     0.25  rolling.EWMMethods.time_ewm('Series', 10, 'int', 'std')
-      19.3±0.7ms       4.71±0.3ms     0.24  rolling.EWMMethods.time_ewm('Series', 1000, 'int', 'std')
-     2.34±0.02μs         557±10ns     0.24  multiindex_object.Integer.time_is_monotonic
-      19.5±0.3ms       4.61±0.2ms     0.24  rolling.EWMMethods.time_ewm('Series', 10, 'float', 'std')
-      19.5±0.3ms       4.61±0.2ms     0.24  rolling.EWMMethods.time_ewm('Series', 1000, 'float', 'std')
-     19.5±0.07ms      3.66±0.02ms     0.19  rolling.EWMMethods.time_ewm('DataFrame', 1000, 'int', 'std')
-     19.6±0.07ms      3.66±0.02ms     0.19  rolling.EWMMethods.time_ewm('DataFrame', 10, 'int', 'std')
-     19.4±0.08ms      3.50±0.01ms     0.18  rolling.EWMMethods.time_ewm('DataFrame', 1000, 'float', 'std')
-     19.4±0.05ms      3.49±0.01ms     0.18  rolling.EWMMethods.time_ewm('DataFrame', 10, 'float', 'std')
-      18.7±0.2ms      2.98±0.01ms     0.16  stat_ops.Correlation.time_corr('spearman')
-         476±9ms       45.6±0.8ms     0.10  binary_ops.Ops2.time_frame_float_floor_by_zero
-      8.78±0.5ms          746±3μs     0.09  period.Algorithms.time_drop_duplicates('series')
-        757±10ms       60.1±0.2ms     0.08  stat_ops.Correlation.time_corr_wide('spearman')
-     18.8±0.03ms         1.32±0ms     0.07  frame_methods.SelectDtypes.time_select_dtypes(100)
-        66.8±1ms       4.41±0.2ms     0.07  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function truediv>)
-        64.0±1ms       3.90±0.6ms     0.06  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function add>)
-      17.7±0.2ms         1.07±0ms     0.06  index_object.IntervalIndexMethod.time_intersection_both_duplicate(1000)
-        65.8±2ms       3.73±0.1ms     0.06  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function truediv>)
-        64.1±1ms       3.57±0.3ms     0.06  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function sub>)
-      64.6±0.9ms      3.58±0.09ms     0.06  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function mul>)
-      64.5±0.3ms       3.57±0.3ms     0.06  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function sub>)
-      72.3±0.9ms       4.00±0.3ms     0.06  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function truediv>)
-      64.2±0.7ms       3.49±0.2ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function mul>)
-        71.2±1ms       3.85±0.2ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function truediv>)
-      64.7±0.7ms       3.44±0.1ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function add>)
-      65.2±0.7ms       3.40±0.3ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function truediv>)
-      66.4±0.9ms       3.36±0.1ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function truediv>)
-      70.3±0.7ms       3.51±0.2ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function truediv>)
-      58.1±0.9ms      2.74±0.02ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function eq>)
-      58.3±0.8ms      2.73±0.01ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function ge>)
-      58.0±0.8ms      2.70±0.01ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function lt>)
-      58.4±0.8ms      2.71±0.01ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function gt>)
-      58.3±0.6ms         2.70±0ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function le>)
-      58.3±0.7ms      2.69±0.01ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function ne>)
-      59.0±0.9ms      2.71±0.01ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function ge>)
-        74.2±3ms       3.41±0.3ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function truediv>)
-      59.3±0.9ms      2.72±0.02ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function lt>)
-      59.0±0.8ms         2.71±0ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function gt>)
-      58.8±0.5ms      2.69±0.02ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function eq>)
-      63.4±0.6ms       2.88±0.2ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function sub>)
-      64.1±0.9ms       2.91±0.2ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function add>)
-        69.1±1ms       3.13±0.2ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function add>)
-      59.3±0.7ms      2.68±0.01ms     0.05  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function ne>)
-        59.8±1ms      2.68±0.01ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function le>)
-        63.7±1ms      2.85±0.09ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function mul>)
-      64.2±0.8ms      2.86±0.08ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function mul>)
-      64.1±0.8ms       2.83±0.1ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function sub>)
-      63.2±0.4ms       2.78±0.1ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function add>)
-      67.3±0.5ms       2.94±0.2ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function mul>)
-        69.3±1ms       2.99±0.2ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function add>)
-     22.4±0.04ms         948±10μs     0.04  index_cached_properties.IndexCache.time_is_monotonic_decreasing('MultiIndex')
-        69.9±1ms       2.94±0.2ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 5.0, <built-in function sub>)
-        70.8±2ms       2.93±0.2ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function sub>)
-        72.2±2ms       2.95±0.2ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function mul>)
-        71.5±1ms       2.91±0.2ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function sub>)
-        70.4±2ms       2.84±0.2ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 3.0, <built-in function mul>)
-        72.2±1ms       2.87±0.2ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function add>)
-      71.6±0.7ms       2.73±0.1ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function sub>)
-      71.4±0.6ms       2.69±0.1ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function add>)
-        72.8±1ms       2.67±0.2ms     0.04  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function mul>)
-     22.1±0.06ms         717±10μs     0.03  index_cached_properties.IndexCache.time_is_monotonic_increasing('MultiIndex')
-     22.1±0.05ms         715±10μs     0.03  index_cached_properties.IndexCache.time_is_monotonic('MultiIndex')
-      56.4±0.5ms      1.48±0.01ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function lt>)
-      57.2±0.7ms      1.48±0.01ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function le>)
-      56.5±0.4ms         1.46±0ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function ge>)
-      57.1±0.6ms         1.47±0ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function le>)
-      57.0±0.6ms         1.47±0ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function lt>)
-      56.8±0.8ms      1.46±0.01ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function gt>)
-      57.0±0.5ms         1.47±0ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function ge>)
-      56.7±0.6ms         1.45±0ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function gt>)
-      56.4±0.3ms      1.42±0.01ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function lt>)
-      56.4±0.4ms      1.42±0.01ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function le>)
-      56.3±0.3ms      1.41±0.01ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function ge>)
-      56.8±0.3ms      1.42±0.01ms     0.03  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function lt>)
-      56.7±0.3ms      1.42±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function ne>)
-      57.0±0.2ms      1.42±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function ge>)
-      56.4±0.7ms         1.40±0ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function gt>)
-      57.0±0.2ms      1.42±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function le>)
-      57.1±0.4ms      1.42±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function le>)
-      57.1±0.4ms      1.42±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function le>)
-      57.3±0.4ms         1.42±0ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function gt>)
-      57.2±0.4ms         1.42±0ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function lt>)
-      57.0±0.8ms         1.41±0ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function ge>)
-      57.7±0.3ms         1.42±0ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function ne>)
-      57.4±0.4ms      1.41±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function lt>)
-      57.3±0.4ms      1.41±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function ge>)
-        57.3±4ms      1.41±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function gt>)
-      56.9±0.5ms      1.40±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 5.0, <built-in function eq>)
-      57.8±0.5ms         1.42±0ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function ne>)
-      57.4±0.5ms      1.40±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function gt>)
-        57.9±5ms      1.42±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function ne>)
-      57.4±0.4ms      1.40±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 4, <built-in function eq>)
-      56.7±0.7ms      1.39±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function ne>)
-      56.9±0.7ms         1.38±0ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function ne>)
-      57.4±0.3ms      1.40±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 3.0, <built-in function eq>)
-     57.9±0.05ms         1.40±0ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.float64'>, 2, <built-in function eq>)
-      56.6±0.5ms      1.37±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 4, <built-in function eq>)
-      57.0±0.5ms      1.37±0.01ms     0.02  binary_ops.IntFrameWithScalar.time_frame_op_with_scalar(<class 'numpy.int64'>, 2, <built-in function eq>)
-      7.38±0.01s          115±1ms     0.02  index_object.IntervalIndexMethod.time_intersection_both_duplicate(100000)
-         276±2ms       2.27±0.1ms     0.01  frame_ctor.FromRange.time_frame_from_range
-       201±0.5ms         1.40±0ms     0.01  frame_methods.SelectDtypes.time_select_dtypes(1000)
-      27.1±0.04s        151±0.4ms     0.01  replace.ReplaceList.time_replace_list_one_match(False)
-      24.8±0.04s       93.4±0.4ms     0.00  replace.ReplaceList.time_replace_list(False)
-      25.3±0.02s      59.0±0.08ms     0.00  replace.ReplaceList.time_replace_list_one_match(True)
-      13.7±0.5ms       5.18±0.4μs     0.00  dtypes.InferDtypes.time_infer_skipna('np-int')
-      14.6±0.4ms       4.97±0.2μs     0.00  dtypes.InferDtypes.time_infer_skipna('np-null')
-      14.9±0.4ms       5.01±0.1μs     0.00  dtypes.InferDtypes.time_infer_skipna('np-floating')
-         331±1ms      6.55±0.03μs     0.00  index_object.IndexEquals.time_non_object_equals_multiindex
-         331±3ms      2.74±0.03μs     0.00  multiindex_object.Equals.time_equals_non_object_index
-      22.9±0.06s          115±1μs     0.00  replace.ReplaceList.time_replace_list(True)

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.

I already commented on a few PRs, for the rest would need to take a further look. Help is certainly welcome to check certain cases.

One recurrent theme seems to be a rather consistent slowdown of a bunch of groupby methods. This can also be seen on the benchmark machine (eg https://pandas.pydata.org/speed/pandas/index.html#groupby.GroupByMethods.time_dtype_as_group?p-dtype='int'&p-method='all'&p-method='any'&odfpy=)

@jorisvandenbossche jorisvandenbossche added the Performance Memory or execution speed performance label Jan 7, 2020
@jorisvandenbossche jorisvandenbossche added this to the 1.0 milestone Jan 7, 2020
@WillAyd
Copy link
Member

WillAyd commented Jan 7, 2020

Thanks for posting this. Am I reading the GroupBy regressions correctly as occurring somewhere between 3b58f48 on on November 9 and 76e39eb on Nov 23?

@TomAugspurger
Copy link
Contributor

FYI, the benchmark machine should be slowly filling in some of those values. It was hanging for a couple weeks on an xarray benchmark.

@TomAugspurger
Copy link
Contributor

Looking at the indexing ones like indexing.NonNumericSeriesIndexing.time_getitem_scalar('string', 'non_monotonic'), that's at least partial from extract_array being relatively slower than getattr(Index, '_values'). Seeing what we can do.

@jorisvandenbossche
Copy link
Member Author

For the GroupBy regressions, I can't really replicate it locally in my default environments (using py 37), it gives only a slight slowdown (more in order of 10% instead of x2). But creating a py36 env for 0.25.3 and master, then I do see a clearer slowdown (although more x1.5 instead of x2).

Example code from one of the benchmarks (groupby::GroupByMethods):

ngroups = 1000
size = ngroups * 2
rng = np.arange(ngroups)
values = rng.take(np.random.randint(0, ngroups, size=size))
key = np.random.randint(0, size, size=size)
df = DataFrame({"values": values, "key": key})

%timeit df.groupby("key")["values"].any()

Profiling that example, one of the factors contributing to the slowdown is more time spent in the _wrap_aggregated_output (and in there, it seems to spend a lot of time creating new Series/Index). This method was eg recently touched by #29124 (@WillAyd which was merged Nov 20, so that would match the time window of Nov 9 - 23 you mentioned).
Although note that the benchmarking also shows a further slight slowdown in second half of December.

@jorisvandenbossche
Copy link
Member Author

jorisvandenbossche commented Jan 8, 2020

Another in the top of the list is this very simple benchmark:

arr_str = np.array(["foo", "bar", "baz"], dtype=object)
%timeit pd.Index(arr_str)

This I can reproduce locally, and gives more than a 2x slowdown. From a quick profile, on master the total amount of time for isinstance checks doubled (this is all in Index.__new__).
If you repeatedly create Index objects from arrays, this can add up, and it might be part of the explanation of the GroupBy slowdown as well (in the profile of the groupby example, I noticed it spent more time in Index.__new__ and Series.__init__)

@WillAyd
Copy link
Member

WillAyd commented Jan 9, 2020

@TomAugspurger is the benchmark machine still filling in values? Would be helpful to know where to bisect if there was more

If not no big deal just wanted to ask

@jbrockmendel
Copy link
Member

I see you closed #18532; is there nothing there that we should be concerned with?

@TomAugspurger
Copy link
Contributor

TomAugspurger commented Jan 9, 2020 via email

@jorisvandenbossche
Copy link
Member Author

Short reproducer for the indexing case:

N = 10 ** 6
data = pd.Series(np.random.rand(N), index=pd.Int64Index(range(N)))
%timeit data[80000]

and as Tom mentioned, this seems mostly due to additional time taken by extract_array (which includes several dtype checks).

@jbrockmendel
Copy link
Member

Are the extract_array dtype checks inside .array? Could be avoided by using ._values?

@jorisvandenbossche
Copy link
Member Author

Are the extract_array dtype checks inside .array? Could be avoided by using ._values?

Yes, I think the dtype checks are for a large part there.
Using _values to avoid this might be a bit tricky, though. For example, for Series with datetime64 (tz-naive) returns numpy array and not DatetimeArray. I don't know what depends on _values returning a numpy array in that case.
We could define .array directly on Series and rely on the block to return the correct thing (right now Series._values calls internal_values() on the block, we could add something similar for .array, although it is yet another "values definition")

@jbrockmendel
Copy link
Member

although it is yet another "values definition"

yah id like to avoid that is possible.

Using _values to avoid this might be a bit tricky, though.

Does it break any tests if we make change .array -> ._values? All of the places that come to mind for using extract_array should be unaffected

@jorisvandenbossche
Copy link
Member Author

@TomAugspurger is it possible the benchmarks machine is not running anymore the last days? (I don't see any updates from since I posted this issue)

@TomAugspurger
Copy link
Contributor

See these in the logs when running asv publish.

[ 33.33%] ·· Error parsing JSON in file '/home/pandas/pandas/asv_bench/results/asv-runner/b62e9aea-conda-py3.6-Cython-matplotlib-numexpr-numpy-openpyxl-pytables-pytest-scipy-sqlalchemy-xlrd-xlsxwriter-xlwt.json': Expecting ',' delimiter: line 48781 column 43 (char 1888787)Segmentation fault

Not sure what's up.

@jorisvandenbossche
Copy link
Member Author

Can't reproduce this. I just ran locally a asv run --quick (and it created a fresh env for that, since something changed), but everything runs without segfault

@TomAugspurger
Copy link
Contributor

Yeah, I'm guessing something got messed up on a run and asv can't recover. Fixing things manually now.

@TomAugspurger
Copy link
Contributor

TomAugspurger commented Jan 17, 2020 via email

@jbrockmendel
Copy link
Member

any other regressions we should focus on in the short term?

@jreback jreback modified the milestones: 1.0.1, 1.1 Feb 1, 2020
@valtron
Copy link

valtron commented Feb 4, 2020

Indexing a multi-index seemingly went from O(1) to O(N):

bug

Code to reproduce:

from time import perf_counter as time
import pandas as pd

for N in [1000, 2000, 4000, 8000, 16000, 32000]:
	values = [str(i) for i in range(N)]
	df = pd.DataFrame({ 'a': values, 'b': [1 for _ in range(N)] })
	a = df['a']
	df.set_index(['a', 'b'], inplace = True)

	t = time()
	df.loc[a]
	t = time() - t
	print(N, t)

(Edit: previously said O(N^2) because I was counting the number of elements indexed too)

@jbrockmendel
Copy link
Member

@valtron thanks for reporting this. any chance you can bisect to figure out when this was introduced?

@valtron
Copy link

valtron commented Feb 4, 2020

@jbrockmendel introduced in the _shallow_copy here: b0f33b3#diff-4ffd1c69d47e0ac9f2de4f9e3e4a118cR643

@jorisvandenbossche
Copy link
Member Author

@valtron can you open a new dedicated issue for this?

@jorisvandenbossche
Copy link
Member Author

The issue is here: #31648

@jreback jreback modified the milestones: 1.1, 1.1.1 Jul 10, 2020
@simonjayhawkins simonjayhawkins modified the milestones: 1.1.1, 1.1.2 Aug 18, 2020
@simonjayhawkins
Copy link
Member

moved off 1.1.1 milestone (scheduled for this week) as no PRs to fix in the pipeline

@simonjayhawkins simonjayhawkins modified the milestones: 1.1.2, 1.1.3 Sep 7, 2020
@simonjayhawkins
Copy link
Member

moved off 1.1.2 milestone (scheduled for this week) as no PRs to fix in the pipeline

@simonjayhawkins simonjayhawkins modified the milestones: 1.1.3, 1.1.4 Oct 5, 2020
@simonjayhawkins
Copy link
Member

moved off 1.1.3 milestone (overdue) as no PRs to fix in the pipeline

@jorisvandenbossche jorisvandenbossche modified the milestones: 1.1.4, 1.2 Oct 27, 2020
@jreback
Copy link
Contributor

jreback commented Nov 25, 2020

closing this, these are old; they maybe stiill here but need new measurements. pls open a new specific issue.

@jreback jreback closed this as completed Nov 25, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Performance Memory or execution speed performance
Projects
None yet
Development

No branches or pull requests

7 participants