Skip to content

Conversation

@Alvaro-Kothe
Copy link
Member

@Alvaro-Kothe Alvaro-Kothe commented Nov 9, 2025


I took the tests from #62514.

The solution here is similar to the one in #62863, where I recompute the window if it detects numerical instability due to catastrophic cancellation.

Another point, is that I removed the consecutive value counts, because, for me, it's unnecessary, since I will recompute the window anyway if it detects severe loss of significant digits. Variance dropping to 0, or very close to, is a severe loss in significant digits which will trigger the recomputation.

The performance increase seen here must be because it is no longer counting consecutive values.

Benchmarks

asv continuous -f 1.1 -E virtualenv:3.13 upstream/main HEAD -b rolling.Methods

Change Before [f4851e5] After [f0519a3] <fix/rolling-var-stability> Ratio Benchmark (Parameter)
- 1.90±0ms 1.69±0ms 0.89 rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'std')
- 2.05±0.01ms 1.81±0.02ms 0.88 rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'std')
- 2.12±0.01ms 1.85±0.01ms 0.87 rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'std')
- 2.01±0.02ms 1.74±0.01ms 0.86 rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'std')
ASV Compare

| Change | Before [f4851e50] <main> | After [f0519a33] <fix/rolling-var-stability> | Ratio | Benchmark (Parameter) | |----------|----------------------------|------------------------------------------------|---------|------------------------------------------------------------------------------------------------| | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'count') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'kurt') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'max') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'mean') | | | 237M | 237M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'median') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'min') | | | 230M | 230M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'sem') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'skew') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'std') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'float', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'count') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'kurt') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'max') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'mean') | | | 237M | 237M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'median') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'min') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'sem') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'skew') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'std') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('expanding', {}), 'int', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'count') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'kurt') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'max') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'mean') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'median') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'min') | | | 226M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'sem') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'skew') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'std') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'count') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'kurt') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'max') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'mean') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'median') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'min') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'sem') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'skew') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'std') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'count') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'kurt') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'max') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'mean') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'median') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'min') | | | 226M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'sem') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'skew') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'std') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'float', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'count') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'kurt') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'max') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'mean') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'median') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'min') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'sem') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'skew') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'std') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('DataFrame', ('rolling', {'window': 10}), 'int', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'count') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'kurt') | | | 224M | 224M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'max') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'mean') | | | 236M | 236M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'median') | | | 224M | 224M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'min') | | | 229M | 229M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'sem') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'skew') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'std') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'float', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'count') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'kurt') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'max') | | | 226M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'mean') | | | 237M | 237M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'median') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'min') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'sem') | | | 226M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'skew') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'std') | | | 226M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('expanding', {}), 'int', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'count') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'kurt') | | | 224M | 224M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'max') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'mean') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'median') | | | 224M | 224M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'min') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'sem') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'skew') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'std') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'float', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'count') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'kurt') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'max') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'mean') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'median') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'min') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'sem') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'skew') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'std') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 1000}), 'int', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'count') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'kurt') | | | 224M | 224M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'max') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'mean') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'median') | | | 224M | 224M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'min') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'sem') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'skew') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'std') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'float', 'sum') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'count') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'kurt') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'max') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'mean') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'median') | | | 225M | 225M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'min') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'nunique') | | | 228M | 228M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'sem') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'skew') | | | 227M | 227M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'std') | | | 226M | 226M | 1.00 | rolling.Methods.peakmem_method('Series', ('rolling', {'window': 10}), 'int', 'sum') | | | 1.92±0ms | 1.91±0.05ms | 0.99 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'count') | | | 3.17±0.03ms | 3.20±0.03ms | 1.01 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'kurt') | | | 3.01±0.03ms | 2.98±0.02ms | 0.99 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'max') | | | 1.43±0.01ms | 1.42±0.02ms | 0.99 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'mean') | | | 138±3ms | 139±4ms | 1.01 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'median') | | | 2.87±0.02ms | 2.87±0.01ms | 1.00 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'min') | | | 27.9±2ms | 28.4±0.3ms | 1.02 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'nunique') | | | 4.62±0.04ms | 4.41±0.03ms | 0.95 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'sem') | | | 1.96±0.01ms | 1.98±0.02ms | 1.01 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'skew') | | - | 2.01±0.02ms | 1.74±0.01ms | 0.86 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'std') | | | 1.41±0.01ms | 1.41±0.01ms | 1.00 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'float', 'sum') | | | 1.88±0.02ms | 1.84±0.01ms | 0.98 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'count') | | | 3.32±0.01ms | 3.32±0.02ms | 1.00 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'kurt') | | | 3.06±0.01ms | 3.07±0.01ms | 1.00 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'max') | | | 1.51±0.02ms | 1.53±0.01ms | 1.01 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'mean') | | | 110±3ms | 110±2ms | 1.00 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'median') | | | 2.97±0.03ms | 3.01±0.06ms | 1.01 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'min') | | | 8.40±0.1ms | 8.53±0.2ms | 1.02 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'nunique') | | | 4.69±0.02ms | 4.46±0.05ms | 0.95 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'sem') | | | 2.07±0.01ms | 2.09±0.01ms | 1.01 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'skew') | | - | 2.12±0.01ms | 1.85±0.01ms | 0.87 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'std') | | | 1.52±0.01ms | 1.52±0.01ms | 1.00 | rolling.Methods.time_method('DataFrame', ('expanding', {}), 'int', 'sum') | | | 2.40±0.2ms | 2.30±0.03ms | 0.96 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'count') | | | 3.98±0.02ms | 3.99±0.03ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'kurt') | | | 3.30±0.01ms | 3.33±0.04ms | 1.01 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'max') | | | 1.83±0.01ms | 1.79±0.01ms | 0.97 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'mean') | | | 79.9±0.6ms | 79.7±0.8ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'median') | | | 3.21±0.07ms | 3.18±0.03ms | 0.99 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'min') | | | 29.5±0.1ms | 29.6±0.07ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'nunique') | | | 5.82±0.02ms | 5.87±0.02ms | 1.01 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'sem') | | | 2.94±0.03ms | 2.94±0.02ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'skew') | | | 2.79±0.01ms | 2.78±0.01ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'std') | | | 1.75±0.01ms | 1.75±0.01ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'float', 'sum') | | | 2.25±0.01ms | 2.25±0.02ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'count') | | | 4.14±0.2ms | 4.14±0.03ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'kurt') | | | 3.37±0.09ms | 3.39±0.05ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'max') | | | 1.99±0.01ms | 1.91±0.01ms | 0.96 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'mean') | | | 79.7±0.6ms | 80.6±5ms | 1.01 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'median') | | | 3.22±0.01ms | 3.23±0.01ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'min') | | | 19.0±0.2ms | 18.4±0.1ms | 0.97 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'nunique') | | | 5.89±0.03ms | 5.90±0.02ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'sem') | | | 3.08±0.04ms | 3.05±0.01ms | 0.99 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'skew') | | | 2.91±0.01ms | 2.88±0.01ms | 0.99 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'std') | | | 1.90±0.02ms | 1.90±0.01ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 1000}), 'int', 'sum') | | | 2.30±0.01ms | 2.33±0.01ms | 1.01 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'count') | | | 4.01±0.02ms | 4.02±0.02ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'kurt') | | | 3.34±0.04ms | 3.37±0.05ms | 1.01 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'max') | | | 1.84±0.05ms | 1.83±0.02ms | 0.99 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'mean') | | | 33.7±0.6ms | 33.7±0.2ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'median') | | | 3.26±0.04ms | 3.27±0.03ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'min') | | | 26.5±0.6ms | 26.5±0.4ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'nunique') | | | 5.88±0.1ms | 5.86±0.04ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'sem') | | | 2.95±0.03ms | 2.96±0.09ms | 1.01 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'skew') | | | 2.79±0.01ms | 2.80±0.03ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'std') | | | 1.78±0.2ms | 1.81±0.05ms | 1.02 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'float', 'sum') | | | 2.25±0.01ms | 2.27±0.02ms | 1.01 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'count') | | | 4.14±0.04ms | 4.15±0.02ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'kurt') | | | 3.46±0.05ms | 3.41±0.01ms | 0.99 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'max') | | | 1.98±0.01ms | 1.94±0.02ms | 0.98 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'mean') | | | 34.2±0.3ms | 34.2±0.5ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'median') | | | 3.37±0.05ms | 3.37±0.03ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'min') | | | 25.4±0.5ms | 25.3±0.3ms | 0.99 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'nunique') | | | 5.97±0.03ms | 6.10±0.1ms | 1.02 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'sem') | | | 3.07±0.02ms | 3.16±0.02ms | 1.03 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'skew') | | | 2.94±0.08ms | 2.98±0.1ms | 1.02 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'std') | | | 1.89±0.01ms | 1.90±0.03ms | 1.00 | rolling.Methods.time_method('DataFrame', ('rolling', {'window': 10}), 'int', 'sum') | | | 1.85±0.03ms | 1.81±0.02ms | 0.98 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'count') | | | 3.15±0.03ms | 3.16±0.02ms | 1.00 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'kurt') | | | 2.95±0.01ms | 2.95±0.02ms | 1.00 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'max') | | | 1.36±0.01ms | 1.37±0.01ms | 1.01 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'mean') | | | 139±5ms | 138±5ms | 0.99 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'median') | | | 2.81±0.01ms | 2.86±0.03ms | 1.02 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'min') | | | 27.7±0.1ms | 28.1±0.3ms | 1.01 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'nunique') | | | 4.38±0.09ms | 4.08±0.1ms | 0.93 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'sem') | | | 1.95±0.02ms | 1.94±0.03ms | 0.99 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'skew') | | - | 1.90±0ms | 1.69±0ms | 0.89 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'std') | | | 1.39±0.06ms | 1.36±0.01ms | 0.98 | rolling.Methods.time_method('Series', ('expanding', {}), 'float', 'sum') | | | 1.77±0.03ms | 1.75±0.01ms | 0.99 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'count') | | | 3.24±0.03ms | 3.23±0.03ms | 1.00 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'kurt') | | | 3.04±0.06ms | 3.02±0.02ms | 1.00 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'max') | | | 1.46±0.01ms | 1.48±0.01ms | 1.01 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'mean') | | | 111±4ms | 110±2ms | 0.99 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'median') | | | 2.92±0.08ms | 2.92±0.03ms | 1.00 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'min') | | | 8.26±0.1ms | 8.59±0.1ms | 1.04 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'nunique') | | | 4.38±0.02ms | 4.13±0.03ms | 0.94 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'sem') | | | 2.00±0.02ms | 2.01±0.03ms | 1.01 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'skew') | | - | 2.05±0.01ms | 1.81±0.02ms | 0.88 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'std') | | | 1.47±0ms | 1.47±0.01ms | 1.00 | rolling.Methods.time_method('Series', ('expanding', {}), 'int', 'sum') | | | 2.19±0.01ms | 2.21±0.01ms | 1.01 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'count') | | | 3.95±0.02ms | 3.95±0.04ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'kurt') | | | 3.24±0.01ms | 3.23±0.01ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'max') | | | 1.79±0.01ms | 1.70±0.01ms | 0.95 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'mean') | | | 79.5±0.5ms | 79.2±0.5ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'median') | | | 3.12±0.03ms | 3.14±0.01ms | 1.01 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'min') | | | 29.5±3ms | 30.7±0.2ms | 1.04 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'nunique') | | | 5.66±0.4ms | 5.61±0.05ms | 0.99 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'sem') | | | 2.88±0.01ms | 2.90±0.01ms | 1.01 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'skew') | | | 2.70±0.01ms | 2.70±0.02ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'std') | | | 1.73±0.06ms | 1.71±0.01ms | 0.98 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'float', 'sum') | | | 2.13±0.01ms | 2.14±0.01ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'count') | | | 4.05±0.01ms | 4.10±0.01ms | 1.01 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'kurt') | | | 3.30±0.01ms | 3.30±0.02ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'max') | | | 2.01±0.2ms | 1.86±0.02ms | 0.93 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'mean') | | | 80.1±0.8ms | 78.9±0.7ms | 0.99 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'median') | | | 3.20±0.03ms | 3.18±0.02ms | 0.99 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'min') | | | 19.1±0.2ms | 18.6±0.2ms | 0.97 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'nunique') | | | 5.60±0.01ms | 5.61±0.01ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'sem') | | | 2.98±0.03ms | 2.99±0.01ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'skew') | | | 2.83±0.02ms | 2.85±0.01ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'std') | | | 1.85±0.03ms | 1.83±0.01ms | 0.99 | rolling.Methods.time_method('Series', ('rolling', {'window': 1000}), 'int', 'sum') | | | 2.23±0.02ms | 2.23±0.01ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'count') | | | 3.94±0.03ms | 3.95±0.03ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'kurt') | | | 3.30±0.02ms | 3.76±0.3ms | ~1.14 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'max') | | | 1.81±0.02ms | 1.71±0.01ms | 0.94 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'mean') | | | 33.6±0.2ms | 33.4±0.4ms | 0.99 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'median') | | | 3.20±0.01ms | 3.21±0.02ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'min') | | | 26.1±0.1ms | 27.1±0.5ms | 1.04 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'nunique') | | | 6.08±0.5ms | 5.59±0.03ms | 0.92 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'sem') | | | 2.91±0.02ms | 2.90±0.05ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'skew') | | | 2.71±0.01ms | 2.72±0.01ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'std') | | | 1.71±0.1ms | 1.70±0.02ms | 0.99 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'float', 'sum') | | | 2.17±0.01ms | 2.14±0.01ms | 0.99 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'count') | | | 4.07±0.01ms | 4.11±0.08ms | 1.01 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'kurt') | | | 3.40±0.02ms | 3.34±0.01ms | 0.98 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'max') | | | 1.94±0.01ms | 1.85±0.01ms | 0.95 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'mean') | | | 34.2±0.2ms | 33.5±0.3ms | 0.98 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'median') | | | 3.30±0.01ms | 3.31±0.04ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'min') | | | 25.2±0.2ms | 25.1±0.3ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'nunique') | | | 5.63±0.03ms | 5.60±0.02ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'sem') | | | 3.02±0.01ms | 2.96±0.06ms | 0.98 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'skew') | | | 2.92±0.08ms | 2.83±0.02ms | 0.97 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'std') | | | 1.84±0.01ms | 1.85±0ms | 1.00 | rolling.Methods.time_method('Series', ('rolling', {'window': 10}), 'int', 'sum') | 

@mroeschke mroeschke added the Window rolling, ewma, expanding label Nov 10, 2025
@mroeschke mroeschke added this to the 3.0 milestone Nov 10, 2025
@mroeschke mroeschke merged commit 1bb2539 into pandas-dev:main Nov 10, 2025
46 checks passed
@mroeschke
Copy link
Member

Thanks @Alvaro-Kothe

@Alvaro-Kothe Alvaro-Kothe deleted the fix/rolling-var-stability branch November 13, 2025 12:43
mittal-aakriti pushed a commit to mittal-aakriti/pandas that referenced this pull request Nov 19, 2025
Co-authored-by: suzyahyah <suzyahyah@users.noreply.github.com>
mittal-aakriti pushed a commit to mittal-aakriti/pandas that referenced this pull request Nov 19, 2025
Co-authored-by: suzyahyah <suzyahyah@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Window rolling, ewma, expanding

3 participants