Garrett Pennington
1B West Michigan Whitecaps| Year | Age | Lvl / Team | PA | AVG/OBP/SLG | HR | SB | wRC+ | WAR | MLE AVG/OBP/SLG |
|---|---|---|---|---|---|---|---|---|---|
| 2024 | 23 | ADET | 37 | .250/.270/.444 | 2 | 0 | 42 | — | .194/.216/.306 |
| 2025 | 24 | A+/ADET | 404 | .296/.367/.488 | 12 | 8 | 84 | — | .240/.299/.403 |
| 2026 | 25 | AA/A+DET | 358 | .289/.360/.537 | 18 | 1 | 90 | — | .236/.293/.426 |
| 2027PROJMLE | 26 | MLBDET | 1 | .238/.291/.402 | 0 | 0 | 97 | 0.0 | |
| 2028PROJ26% MLB | 27 | MLBDET | 44 | .237/.291/.399 | 1 | 0 | 97 | -0.0 |
Tools · ContractCON 50 / POW 50
Career Stats + Projections
Methodology▸ how these numbers are built
All seasons translated to park-neutral MLB-equivalent (MLE) and combined per year. 2027 = full-season projection (no games played yet). 2028+ via Advanced Marcel + aging curve.
| Year | Age | Lvl | Team | MLB% | PA | AB | H | 2B | 3B | HR | BB | SO | HBP | SB | CS | AVG | OBP | SLG | OPS | ISO | BABIP | K% | BB% | wOBA | wRC+ | BAT | RUN | FLD | POS | REP | WAR |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ▸ Career — actual stats, one row per stint (as recorded, no adjustments) | |||||||||||||||||||||||||||||||
| 2024 | 23 | A | Lakeland Flying Tigers | — | 37 | 36 | 9 | 1 | 0 | 2 | 1 | 5 | 0 | 0 | 0 | 250 | 270 | 444 | 715 | 194 | 241 | 14 | 3 | 313 | 42 | — | — | — | — | — | — |
| 2025 | 24 | A+ | West Michigan Whitecaps | — | 149 | 134 | 43 | 15 | 0 | 2 | 7 | 32 | 7 | 0 | 2 | 321 | 385 | 478 | 863 | 157 | 406 | 21 | 5 | 382 | 88 | — | — | — | — | — | — |
| 2025 | 24 | A | Lakeland Flying Tigers | — | 255 | 227 | 64 | 16 | 1 | 10 | 22 | 45 | 4 | 8 | 3 | 282 | 356 | 493 | 849 | 211 | 310 | 18 | 9 | 372 | 82 | — | — | — | — | — | — |
| 2026 | 25 | AA | Erie SeaWolves | — | 106 | 96 | 27 | 5 | 1 | 4 | 8 | 29 | 2 | 0 | 1 | 281 | 349 | 479 | 828 | 198 | 365 | 27 | 8 | 366 | 89 | — | — | — | — | — | — |
| 2026 | 25 | A+ | West Michigan Whitecaps | — | 252 | 226 | 66 | 17 | 1 | 14 | 22 | 49 | 4 | 1 | 2 | 292 | 365 | 562 | 927 | 270 | 319 | 19 | 9 | 403 | 91 | — | — | — | — | — | — |
| ▸ Career — adjusted (every ACTUAL line translated to park/league-neutral MLB equivalents) | |||||||||||||||||||||||||||||||
| 2024 | 23 | A MLE | Lakeland Flying Tigers | — | 37 | 36 | 7 | 1 | 0 | 1 | 1 | 7 | 0 | 0 | 0 | 194 | 216 | 306 | 522 | 111 | 207 | 19 | 3 | 231 | 42 | — | — | — | — | — | — |
| 2025 | 24 | A+ MLE | West Michigan Whitecaps | — | 149 | 137 | 36 | 12 | 0 | 2 | 4 | 42 | 7 | 0 | 2 | 263 | 318 | 394 | 712 | 131 | 348 | 28 | 3 | 299 | 88 | — | — | — | — | — | — |
| 2025 | 24 | A MLE | Lakeland Flying Tigers | — | 255 | 233 | 53 | 13 | 1 | 9 | 16 | 61 | 4 | 8 | 3 | 227 | 289 | 408 | 696 | 180 | 255 | 24 | 6 | 289 | 82 | — | — | — | — | — | — |
| 2026 | 25 | AA MLE | Erie SeaWolves | — | 106 | 98 | 24 | 4 | 1 | 3 | 6 | 35 | 2 | 0 | 1 | 245 | 302 | 398 | 700 | 153 | 353 | 33 | 6 | 300 | 89 | — | — | — | — | — | — |
| 2026 | 25 | A+ MLE | West Michigan Whitecaps | — | 252 | 233 | 54 | 13 | 1 | 11 | 15 | 62 | 4 | 1 | 2 | 232 | 290 | 438 | 727 | 206 | 263 | 25 | 6 | 302 | 91 | — | — | — | — | — | — |
| 2024 | 23 | A MLE | Lakeland Flying Tigers | — | 37 | 36 | 7 | 1 | 0 | 1 | 1 | 7 | 0 | 0 | 0 | 194 | 216 | 306 | 522 | 111 | 214 | 19 | 3 | 231 | 42 | — | — | — | — | — | — |
| 2024 | 23 | A RAW | Lakeland Flying Tigers | — | 37 | 36 | 9 | 1 | 0 | 2 | 1 | 5 | 0 | 0 | 0 | 250 | 270 | 444 | 715 | 194 | 241 | 14 | 3 | 313 | 42 | — | — | — | — | — | — |
| 2025 | 24 | A MLE | 2 teams | — | 404 | 370 | 86 | 24 | 1 | 10 | 20 | 104 | 11 | 8 | 5 | 232 | 292 | 384 | 676 | 151 | 293 | 26 | 5 | 293 | 84 | — | — | — | — | — | — |
| 2025 | 24 | A RAW | 2 teams | — | 404 | 361 | 107 | 31 | 1 | 12 | 29 | 77 | 11 | 8 | 5 | 296 | 367 | 488 | 854 | 191 | 345 | 19 | 7 | 376 | 84 | — | — | — | — | — | — |
| 2026 | 25 | A+ MLE | 2 teams | — | 358 | 331 | 77 | 17 | 2 | 13 | 21 | 98 | 6 | 1 | 3 | 233 | 291 | 414 | 704 | 181 | 291 | 27 | 6 | 301 | 90 | — | — | — | — | — | — |
| 2026 | 25 | A+ RAW | 2 teams | — | 358 | 322 | 93 | 22 | 2 | 18 | 30 | 78 | 6 | 1 | 3 | 289 | 360 | 537 | 898 | 248 | 332 | 22 | 8 | 392 | 90 | — | — | — | — | — | — |
| 2024 | 23 | A MLE | Lakeland Flying Tigers | — | 37 | 36 | 7 | 1 | 0 | 1 | 1 | 7 | 0 | 0 | 0 | 194 | 216 | 306 | 522 | 111 | 207 | 19 | 3 | 231 | 42 | — | — | — | — | — | — |
| 2025 | 24 | A MLE | 2 teams | — | 404 | 370 | 86 | 24 | 1 | 10 | 20 | 104 | 11 | 8 | 5 | 232 | 292 | 384 | 676 | 151 | 289 | 26 | 5 | 293 | 84 | — | — | — | — | — | — |
| 2026 | 25 | A+ MLE | 2 teams | — | 358 | 328 | 77 | 17 | 2 | 13 | 21 | 98 | 6 | 1 | 3 | 235 | 291 | 418 | 708 | 183 | 290 | 27 | 6 | 301 | 90 | — | — | — | — | — | — |
| ▸ Model inputs — neutral MLE (past 3 seasons) | |||||||||||||||||||||||||||||||
| 2024 | 23 | A MLE | Lakeland Flying Tigers | — | 37 | 36 | 7 | 1 | 0 | 1 | 1 | 7 | 0 | 0 | 0 | 194 | 216 | 306 | 522 | 111 | 207 | 19 | 3 | 231 | 42 | — | — | — | — | — | — |
| 2025 | 24 | A MLE | 2 teams | — | 404 | 370 | 86 | 24 | 1 | 10 | 20 | 104 | 11 | 8 | 5 | 232 | 292 | 384 | 676 | 151 | 289 | 26 | 5 | 293 | 84 | — | — | — | — | — | — |
| 2026 | 25 | A+ MLE | 2 teams | — | 358 | 328 | 77 | 17 | 2 | 13 | 21 | 98 | 6 | 1 | 3 | 235 | 291 | 418 | 708 | 183 | 290 | 27 | 6 | 301 | 90 | — | — | — | — | — | — |
| ▸ 2027 season | |||||||||||||||||||||||||||||||
| ▸ 2027 — full MLE projection (neutral park, full availability) | |||||||||||||||||||||||||||||||
| 2027 | 26 | MLB MLE | DET | 0% | 380 | 351 | 86 | 20 | 2 | 12 | 20 | 111 | 6 | 3 | 2 | 243 | 296 | 412 | 708 | 170 | 317 | 29 | 5 | 312 | 97 | -1 | -0 | +0 | -7 | +8 | 0.1 |
| ▸ 2027 — real world (MLB) | |||||||||||||||||||||||||||||||
| 2027 | 26 | MLB CTX | DET | 0% | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 238 | 291 | 402 | 693 | 164 | 311 | 0 | 0 | 306 | 97 | -0 | +0 | +0 | -0 | +0 | 0.0 |
| ▸ Career projection (2028+) — MLB context, MLB playing time (PA × MLB%) | |||||||||||||||||||||||||||||||
| 2028 | 27 | MLB MLE | DET | 26% | 167 | 153 | 38 | 9 | 1 | 5 | 9 | 49 | 3 | 1 | 1 | 241 | 296 | 409 | 705 | 168 | 314 | 29 | 5 | 311 | 97 | -1 | -0 | +0 | -3 | +4 | -0.0 |
| 2028 | 27 | MLB CTX | DET | 26% | 44 | 41 | 9 | 2 | 0 | 1 | 2 | 13 | 1 | 0 | 0 | 237 | 291 | 399 | 690 | 162 | 309 | 30 | 5 | 305 | 97 | -0 | +0 | +0 | -1 | +1 | -0.0 |
| ▸ Career Totals | |||||||||||||||||||||||||||||||
| ▸ Career totals — MLB only (actual + projected) | |||||||||||||||||||||||||||||||
| Career | — | A+C | — | 44 | 41 | 9 | 2 | 0 | 1 | 2 | 13 | 1 | 0 | 0 | 220 | 273 | 341 | 614 | 122 | 296 | 30 | 5 | 305 | 88 | -0 | +0 | +0 | -1 | +1 | -0.0 | |
| / 162G | — | A+C | — | 650 | 606 | 134 | 30 | 0 | 15 | 30 | 192 | 15 | 0 | 0 | 221 | 275 | 345 | 620 | 124 | 298 | 30 | 5 | 305 | 88 | -3 | +0 | +0 | -12 | +14 | -0.0 | |
| Career | — | MLE | — | 1121 | 1033 | 243 | 59 | 5 | 34 | 59 | 303 | 23 | 11 | 10 | 235 | 291 | 401 | 692 | 166 | 298 | 27 | 5 | 299 | 88 | -1 | -0 | +0 | -6 | +7 | -0.0 | |
| / 162G | — | MLE | — | 650 | 599 | 141 | 34 | 3 | 20 | 34 | 176 | 13 | 6 | 6 | 235 | 291 | 402 | 693 | 167 | 298 | 27 | 5 | 299 | 88 | -2 | -1 | +0 | -12 | +14 | -0.1 | |
How the minor-league lines were translated
One row per minor-league stint. Open a row to see each step: the raw rate, the park adjustment, the league/level factor, the age adjustment (hitters) and the resulting MLE rate. Factors are the same ones listed on the MLE Factors page.
2026 A+West Michigan Whitecaps · 252 PAwOBA .392 → .302 (−90)K% 19.4% → 24.7%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 19.44% | ÷1.000 | ×1.270 | — | — | 24.69% |
| BB% (unintentional) /PA | 8.73% | ÷1.000 | ×0.710 | — | ×0.968 | 6.00% |
| HBP% /PA | 1.59% | — | ×0.790 | — | ×0.968 | 1.21% |
| Singles /BIP | 19.21% | ÷1.000 | ×0.920 | ×0.985 | ×0.968 | 16.85% |
| Doubles /BIP | 9.60% | ÷1.000 | ×0.810 | ×0.985 | ×0.968 | 7.42% |
| Triples /BIP | 0.56% | ÷1.000 | ×0.850 | ×0.985 | ×0.968 | 0.46% |
| Home runs /BIP | 7.91% | ÷1.000 | ×0.800 | — | ×0.968 | 6.13% |
Factors used: league row Midwest League. Park (home-season share, regressed): no park row on file (treated as neutral) — applied at half strength. Age: age 26 vs a level average of 22.8 → −3.2% on BB/HBP/hit rates (3.2 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.985.
Result: wOBA .392 → .302; ISO .270 → .203; BABIP .319 → .263. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2026 AAErie SeaWolves · 106 PAwOBA .356 → .300 (−56)K% 27.4% → 33.4%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 27.36% | ÷1.000 | ×1.220 | — | — | 33.38% |
| BB% (unintentional) /PA | 7.55% | ÷1.000 | ×0.700 | — | ×0.988 | 5.22% |
| HBP% /PA | 1.89% | — | ×0.850 | — | ×0.988 | 1.58% |
| Singles /BIP | 25.37% | ÷1.000 | ×0.970 | ×1.050 | ×0.988 | 25.53% |
| Doubles /BIP | 7.46% | ÷1.000 | ×0.860 | ×1.050 | ×0.988 | 6.66% |
| Triples /BIP | 1.49% | ÷1.000 | ×0.950 | ×1.050 | ×0.988 | 1.47% |
| Home runs /BIP | 5.97% | ÷1.000 | ×0.780 | — | ×0.988 | 4.60% |
Factors used: league row EL. Park (home-season share, regressed): no park row on file (treated as neutral) — applied at half strength. Age: age 26 vs a level average of 24.8 → −1.2% on BB/HBP/hit rates (1.2 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×1.050.
Result: wOBA .356 → .300; ISO .198 → .155; BABIP .365 → .353. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2025 ALakeland Flying Tigers · 255 PAwOBA .364 → .289 (−75)K% 17.6% → 24.0%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 17.65% | ÷0.998 | ×1.360 | — | — | 24.04% |
| BB% (unintentional) /PA | 8.63% | ÷0.945 | ×0.690 | — | ×0.970 | 6.11% |
| HBP% /PA | 1.57% | — | ×0.780 | — | ×0.970 | 1.19% |
| Singles /BIP | 20.33% | ÷1.051 | ×0.920 | ×0.982 | ×0.970 | 16.94% |
| Doubles /BIP | 8.79% | ÷0.971 | ×0.830 | ×0.982 | ×0.970 | 7.15% |
| Triples /BIP | 0.55% | ÷1.150 | ×0.910 | ×0.982 | ×0.970 | 0.41% |
| Home runs /BIP | 5.49% | ÷0.864 | ×0.800 | — | ×0.970 | 4.94% |
Factors used: level-wide A factors (no league-specific row for this league/era). Park (home-season share, regressed): HR 73, 1B 110, 2B 94, 3B 130, K 100, BB 89 — applied at half strength. Age: age 25 vs a level average of 22.0 → −3.0% on BB/HBP/hit rates (3.0 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.982.
Result: wOBA .364 → .289; ISO .211 → .176; BABIP .310 → .255. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2025 A+West Michigan Whitecaps · 149 PAwOBA .375 → .299 (−76)K% 21.5% → 28.4%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 21.48% | ÷0.960 | ×1.270 | — | — | 28.41% |
| BB% (unintentional) /PA | 4.70% | ÷1.106 | ×0.710 | — | ×0.978 | 2.95% |
| HBP% /PA | 4.70% | — | ×0.790 | — | ×0.978 | 3.63% |
| Singles /BIP | 25.49% | ÷1.027 | ×0.920 | ×0.999 | ×0.978 | 22.30% |
| Doubles /BIP | 14.71% | ÷0.948 | ×0.810 | ×0.999 | ×0.978 | 12.28% |
| Triples /BIP | 0.00% | ÷0.900 | ×0.850 | ×0.999 | ×0.978 | 0.00% |
| Home runs /BIP | 1.96% | ÷0.850 | ×0.800 | — | ×0.978 | 1.81% |
Factors used: league row Midwest League. Park (home-season share, regressed): HR 70, 1B 105, 2B 90, 3B 80, K 92, BB 121 — applied at half strength. Age: age 25 vs a level average of 22.8 → −2.2% on BB/HBP/hit rates (2.2 yr older than average). Ground-ball/fly-ball mix moves 1B/2B/3B by ×0.999.
Result: wOBA .375 → .299; ISO .157 → .128; BABIP .406 → .348. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).
2024 ALakeland Flying Tigers · 37 PAwOBA .303 → .231 (−72)K% 13.5% → 17.9%
| Component | Raw | Park ÷ | Level factor × | GB/FB × | Age × | = MLE |
|---|---|---|---|---|---|---|
| K% /PA | 13.51% | ÷1.028 | ×1.360 | — | — | 17.88% |
| BB% (unintentional) /PA | 2.70% | ÷1.061 | ×0.690 | — | ×0.980 | 1.72% |
| HBP% /PA | 0.00% | — | ×0.780 | — | ×0.980 | 0.00% |
| Singles /BIP | 19.35% | ÷0.980 | ×0.920 | — | ×0.980 | 17.81% |
| Doubles /BIP | 3.23% | ÷1.351 | ×0.830 | — | ×0.980 | 1.94% |
| Triples /BIP | 0.00% | ÷1.106 | ×0.910 | — | ×0.980 | 0.00% |
| Home runs /BIP | 6.45% | ÷1.099 | ×0.800 | — | ×0.980 | 4.60% |
Factors used: level-wide A factors (no league-specific row for this league/era). Park (home-season share, regressed): HR 120, 1B 96, 2B 170, 3B 121, K 106, BB 112 — applied at half strength. Age: age 24 vs a level average of 22.0 → −2.0% on BB/HBP/hit rates (2.0 yr older than average).
Result: wOBA .303 → .231; ISO .194 → .130; BABIP .241 → .207. Both wOBAs use the same linear weights, so the change is the translation alone. The MLE line is not regressed to the mean — regression happens later, when seasons are blended into a projection (how).