MEASURED. REPRODUCIBLE. WORKLOAD-SPECIFIC.

Performance you
can inspect.

Native, eager operations on identical tables. Every result is checked against an independent row-by-row checksum. These measurements include faster and slower cases; they are not a claim of general superiority.

12th Gen Intel(R) Core(TM) i3-1215U · one thread per engine, CPU affinity [0] · 2026-10-28
2 warmups · 7 timed samples per case · numpy 2.3.5, pandas 3.1.0, polars 2.1.0 · QFrame v0.4.0

100,000 rows

Median operation time. Lower is faster.
OperationSheetframe 0.1Sheetframe 0.2pandas defaultpandas objectPolarsQFrame
Select one column4.78 µs8.78 µs1.03 ms967.26 µs334.09 µs3.75 µs
Filter rows2.12 ms2.19 ms2.69 ms2.67 ms977.34 µs669.13 µs
Group + sum70.77 ms5.07 ms17.33 ms10.26 ms4.13 ms17.46 ms
Stable numeric sort56.73 ms21.81 ms8.08 ms8.47 ms14.27 ms—
Filter → group → sort47.28 ms4.72 ms12.17 ms8.85 ms3.64 ms8.81 ms

1,000,000 rows

Median operation time. Lower is faster.
OperationSheetframe 0.1Sheetframe 0.2pandas defaultpandas objectPolarsQFrame
Select one column10.95 µs10.09 µs946.32 µs934.49 µs335.76 µs11.03 µs
Filter rows24.93 ms24.68 ms18.79 ms18.50 ms7.18 ms5.65 ms
Group + sum694.08 ms51.66 ms162.79 ms83.39 ms28.45 ms177.51 ms
Stable numeric sort714.27 ms281.51 ms112.86 ms119.29 ms200.29 ms—
Filter → group → sort455.07 ms50.31 ms94.96 ms59.65 ms19.66 ms91.93 ms

What these numbers mean

The input has three columns: 20 repeated string groups, float64 amounts from 0 to 999, and boolean flags. Input creation, imports, startup, result conversion and checksum validation are outside the timer. Excel I/O is not measured. All operations produce native DataFrame results; selection can share buffers and filters can use indexed views.

pandas is shown with both its default Python-backed string dtype and an explicit object string column. Optional PyArrow is absent. Polars uses eager operations and stable ordering. QFrame’s incompatible unstable sort is omitted; its group case includes a timed sort to match group order for this dataset.

Sheetframe 0.2 replaces JSON key construction with typed hashing and streamed aggregates. Large numeric columns use stable radix sorting, which consumes extra temporary memory. The native allocation benchmark reports that tradeoff separately.

A single synthetic, null-free workload cannot establish the fastest library for every job. Thread count, strings, cardinality, nulls, data distribution and hardware can change the result. Read the methodology and native allocation results, rerun the benchmark, or inspect every raw sample.