Cardinals By The Numbers: 06/30/2025
Cardinals By The Numbers: Rebound
What a good 2 weeks for the team; they won by any means necessary and both the hitting and pitching looked better than the previous couple of weeks.
The team went 10-3 over the last 14 days against the White Sox, Reds, Cubs, and Indians, including sweeps in the first and last series. They had a +27 run differential in that time, up over the -12 from the previous 2 weeks.
| W | L | Pct |
| 47 | 38 | .553 |

I’m sure there is a large percentage of the fanbase that can’t believe this team is over .500 at this point of the season, and that they’ve been over .500 since May 9th (47 games). They jumped .039 in win percentage in the last 2 weeks. At the rate they are playing, they could end the season 90-72 (the .553 win percentage times 162 games).
| Home | Road | ||||
| W | L | Pct | W | L | Pct |
| 29 | 17 | .630 | 18 | 21 | .462 |
Most of the last 2 weeks was at home; they White Sox series was in Chicago, so the sweep definitely helped the road numbers. A 7-3 homestand helped to keep their good home numbers up.
| W | L | T | Pct |
| 15 | 10 | 2 | .600 |
They were 3-0-1 in series over the last 2 weeks, splitting the 4-games series with the Cubs. That pushes them to a .600 winning percentage for series, a healthy number for almost any team.
| RA | RA | RD | pW | pL | pPct |
| 403 | 358 | 45 | 47 | 38 | .553 |


With the recent success, the team has seen it’s run differential jump from +18 to +45. That’s tied for the highest it’s been this season (May 19, May 28). The run differential also supports the current record; the Pythagorean Wins of 47 matches their actual wins. It also supports the 90 win season.
| RS/G | RA/G | |
| Previous Column | 4.23 | 5.15 |
| Last 2 Week | 5.77 | 3.69 |
| Season | 4.74 | 4.21 |

The previous column talked about the decline in offense and pitching over that 2 week period; they completely flipped it around. They scored 1.55 more runs per game while allowing 1.46 fewer runs. That brought the season runs/game up .18 and dropped the runs allowed by .10.
| RS | Total | W | L | Pct | RA | Total | W | L | Pct |
| 10+ | 7 | 7 (+1) | 0 | 1.000 | 10+ | 5 | 0 | 5 | .000 |
| 9 | 5 | 3 (+1) | 2 | .600 | 9 | 3 | 0 | 3 | .000 |
| 8 | 5 | 5 (+3) | 0 | 1.000 | 8 | 3 | 0 | 3 (+1) | .000 |
| 7 | 6 | 3 (+1) | 3 | .500 | 7 | 7 | 2 (+1) | 5 | .286 |
| 6 | 11 | 10 (+2) | 1 | .909 | 6 | 3 | 2 (+2) | 1 | .667 |
| 5 | 9 | 8 (+2) | 1 | .889 | 5 | 15 | 7 (+1) | 8 | .467 |
| 4 | 11 | 4 | 7 | .364 | 4 | 10 | 6 (+1) | 4 (+1) | .600 |
| 3 | 4 | 2 | 2 | .500 | 3 | 12 | 7 | 5 (+1) | .583 |
| 2 | 8 | 4 | 4 | .500 | 2 | 10 | 6 (+2) | 4 | .600 |
| 1 | 14 | 1 | 13 (+1) | .071 | 1 | 7 | 7 (+1) | 0 | 1.000 |
| 0 | 5 | 0 | 5 (+2) | .000 | 0 | 10 | 10 (+2) | 0 | 1.000 |
Every one of the Cardinals wins and losses have a direct correlation to runs scored; when they scored 5 or more, they won and when they scored less than 2, they lost. Pretty simple. The runs allowed was a little different since they allowed anywhere from no runs to 8; it was expected that allowing 8 runs would be a lost, but it’s more questionable when they only allowed 3-4 runs, especially with the offense firing pretty much the whole time.
| RD | Total |
| 10 or more | 2 (+1) |
| 9 | 0 |
| 8 | 1 |
| 7 | 7 (+1) |
| 6 | 3 (+1) |
| 5 | 6 (+2) |
| 4 | 1 |
| 3 | 5 (+1) |
| 2 | 7 (+1) |
| 1 | 15 (+3) |
| 0 | 0 |
| -1 | 12 |
| -2 | 4 |
| -3 | 10 (+2) |
| -4 | 4 |
| -5 | 0 |
| -6 | 3 |
| -7 | 1 |
| -8 | 2 (+1) |
| -9 | 0 |
| -10 or more | 2 |
The Cardinals are 15-12 in 1-run games; I don’t have the numbers in front of me, but that was a point where they struggled in the recent past.

After the previous 2 weeks, the Cardinals have seen their playoff odds shoot up; they went up by almost 40% in this period alone and are the highest they’ve been all season. There is still a long way to go, so it’s not a guarantee yet.
| Place | Team | W | L | Pct | GB |
| 1 | Chicago Cubs | 49 | 35 | .583 | — |
| 2 | Milwaukee Brewers | 47 | 37 | .560 | 2.0 |
| 3 | St. Louis Cardinals | 47 | 38 | .553 | 2.5 |
| 4 | Cincinnati Reds | 44 | 40 | .524 | 5.0 |
| 5 | Pittsburgh Pirates | 35 | 50 | .412 | 14.5 |
Everyone caught the Cubs a little bit; unfortunately the Brewers stayed right in front of the Cardinals pretty much the whole time.
| Team | W | L | Pct | GB |
| New York Mets | 48 | 37 | .565 | +1.0 |
| Milwaukee Brewers | 47 | 37 | .560 | +0.5 |
| St. Louis Cardinals | 47 | 38 | .553 | — |
| San Diego Padres | 45 | 38 | .542 | 1.0 |
| San Francisco Giants | 45 | 39 | .536 | 1.5 |
| Cincinnati Reds | 44 | 40 | .524 | 2.5 |
| Arizona Diamondbacks | 41 | 42 | .494 | 5.0 |
| Atlanta Braves | 38 | 45 | .458 | 8.0 |
| Miami Marlins | 37 | 45 | .451 | 8.5 |
| Washington Nationals | 35 | 49 | .417 | 11.5 |
| Pittsburgh Pirates | 35 | 50 | .412 | 12.0 |
| Colorado Rockies | 19 | 65 | .226 | 27.5 |
The Cardinals have played into a wild card spot by a little bit; there are 3 teams within 4 games of them. It’ll be a hard road to hang onto though; the Giants have already started to upgrade and the Padres and Reds should be buyers too. I still maintain that the Braves are too good to continue being this bad.
Now onto the player performances.
| Rank | Player | OPS+ Last | OPS+ Now | Change |
| 1 | Ivan Herrera | 158 | 156 | -2 |
| 2 | Alec Burleson (+2) | 114 | 122 | +8 |
| 3 | Brendan Donovan | 131 | 122 | -9 |
| 4 | Willson Contreras (+1) | 110 | 112 | +2 |
| 5 | Yohel Pozo (NR) | 100 | 108 | +8 |
I’m holding off on putting Jose Fermin (464) on the top, as he’s only played in a handful of games; I’ll add him in 2 weeks if he continues to hit. Thomas Saggese fell out of the top 5 after being called back up; he dropped from 143 to 89.
It’s too bad that the team will be without their best hitter for an extended period; the team announce Herrera has a Grade 2 hamstring strain. It’ll hurt, but it will also give the team more options at DH.
The rest of the top 5 has pretty much been the same, with Pozo cracking the top 5; he’s been playing well in limited time and should continue to spell Pedro Pages every few days.
Nolan Gorman and Masyn Winn are the only other players above average right now, which is surprising because of how well this team is hitting. 8 of the 16 guys on the roster during that period all saw their OPS+ go up, so that would explain the past 2 weeks.
| Rank | Player | OPS+ Last | OPS+ Now | Change |
| Ryan Vilade | -18 | -18 | 0 | |
| 1 | Jose Barrero | 35 | 30 | -5 |
| 2 | Michael Siani | 58 | 58 | 0 |
| 2 | Jordan Walker (-1) | 65 | 58 | -7 |
| 4 | Pedro Pages | 71 | 76 | +5 |
| 5 | Victor Scott II | 82 | 88 | +6 |
I threw Vilade where he would rank if he were still with the team; I’ll do the same thing next time with Barrero. Other than that, nothing changed as far as names; we did see Walker drop to be tied with Siani for 2nd worst on the team. Walker is back on the IL but already rehabbing in Memphis, so we’ll see him back soon.
Garrett Hampson should have enough at bats to be added; he was sitting at a 13 OPS+ after 5 games since he was claimed on waivers.
| Rank | Player | ERA+ Last | ERA+ Now | Change |
| 1 | Andre Granillo (NR) | NA | 321 | +321 |
| 2 | Phil Maton (-1) | 201 | 246 | +45 |
| 2 | Riley O’Brien (NR) | 109 | 187 | +78 |
| 4 | JoJo Romero | 138 | 149 | +11 |
| 5 | Kyle Leahy (-3) | 177 | 147 | -30 |
McGreevy struggled in his most recent promotion, so he fell off the list going from 136 to 99. Steven Matz also dropped off the list; his fall from 177 to 123 wasn’t as drastic since he’s still pitching at an above average level.
This bullpen is crazy good; they went from an early season liability to one of the better ‘pens in baseball. Matt Svanson (130) and Ryan Helsley (122) are both pitching well and can’t crack this list.
The rotation has Sonny Gray and Matthew Liberatore doing well, then average or below average guys; Andre Pallante at least improved this past period (84 > 93), but Miles Mikolas continues to fall off (94 > 87).
| Rank | Player | ERA+ Last | ERA+ Now | Change |
| 1 | Ryan Fernandez | 37 | 38 | +1 |
| 2 | Roddery Munoz | 45 | 54 | +9 |
| 3 | Chris Roycroft (+1) | 60 | 61 | +1 |
| 4 | Gordon Graceffo (-1) | 56 | 63 | +7 |
| 5 | Miles Mikolas (NR) | 94 | 87 | -7 |
As mentioned above, Pallante has pitched better recently, and it was good enough to get out of the bottom 5 of ERA+; he switched places with Mikolas. Everything else was pretty much the same with just a flip flop at 3 and 4 and everyone but Mikolas getting better (although Fernandez’s increase was due to league average changing).
| Rank | Player | WAR Last | WAR Now | Change |
| 1 | Brendan Donovan | 2.3 | 2.4 | +0.1 |
| 2 | Victor Scott II (+1) | 1.7 | 1.8 | +0.1 |
| 2 | Sonny Gray (+1) | 1.2 | 1.8 | +0.6 |
| 4 | Willson Contreras (+1) | 1.1 | 1.4 | +0.3 |
| 5 | Masyn Winn (NR) | 0.9 | 1.3 | +0.4 |
| 6 | Nolan Arenado (+1) | 1.0 | 1.2 | +0.2 |
| 6 | Alec Burleson (NR) | 0.5 | 1.2 | +0.7 |
| 6 | Matthew Liberatore (NR) | 0.5 | 1.2 | +0.7 |
| 6 | Phil Maton (NR) | 0.7 | 1.2 | +0.5 |
| 6 | Lars Nootbaar (+1) | 1.0 | 1.2 | +0.2 |
I’m expanding this week to a top 10 because it’s a combination of pitchers and hitters. 7 through 10 were Arenado (t7th), Nootbaar (t7th), Herrera (9th), and Matz (10th).
Erick Fedde fell off the expanded list; he dropped from 1.3 to 0.8. Leahy was tied at 5th last week and fell off the expanded list as well; he dropped from 1.1 to 0.9.
There’s been a lot of fluctuation at the bottom of the list; we’ve seen some big jumps of half a win or more in Burleson, Liberatore, and Maton.
| Rank | Player | WAR Last | WAR Now | Change |
| 1 | Ryan Fernandez | -1.0 | -1.0 | 0.0 |
| 1 | Jordan Walker | -0.6 | -1.0 | -0.4 |
| 2 | Gordon Graceffo | -0.6 | -0.6 | 0.0 |
| 3 | Chris Roycroft (-1) | -0.6 | -0.5 | +0.1 |
| 5 | 9 players | NA | -0.1 | NA |
Michael Siani and Munoz were tied last week with -0.2 for the 5th spot; this week, they joined Vilade, Saggese, Mikolas, Hampson, Barrero, John King, and Luken Baker at -0.1. That’s everyone that has cost the team wins as of right now; the rest of the roster is positive or 0.0.
I hate to see Walker drop almost a half a win; like I said, he’s on the IL and hopefully back soon to his pre-wrist injury form where he looked like he was turning the corner. We’ll see.
I’ll be back in 2 weeks with updated numbers.

