Real or not? This Astros offense could be the best in MLB history

There is something remarkable going on in the early weeks of 2019. Here is a list of the best offenses in the past 100 years, ranked by the weighted runs created formula at FanGraphs (wRC+ adjusts for the league run environment and home park, with 100 being average):

2019 Astros: 133
1927 Yankees: 126
1930 Yankees: 124
2017 Astros: 122
1976 Reds: 120
1982 Brewers: 120
2003 Red Sox: 120

And here are the worst offenses:

2019 Marlins: 65
1920 Athletics: 67
1963 Mets: 69
1952 Pirates: 70
1965 Mets: 71
1930 Red Sox: 71

I'm not surprised to see the Marlins atop the worst offenses list, considering they are averaging a feeble 2.69 runs per game, an almost unfathomable total in the 2019 version of baseball. After all, the Astros are averaging 1.88 home runs per game after swatting four more in an 8-1 victory over the Tigers on Monday.

I am a bit surprised to see the Astros rank at this level, given that their offense got off to a bit of a slow start, plus the fact that the Rangers actually lead the majors in runs per game, 5.61 to 5.45 over the Astros. Weighted runs created is not based on runs, however, and the Astros fare much better than the Rangers in their triple-slash lines:

Astros: .281/.353/.507
Rangers: .245/.330/.443

The Rangers are seventh in the majors in OPS but first with runners in scoring position, which is why they're scoring so many runs. Throw in park factors, and the Houston offense rates as far superior. Of course, you can debate the best method to rate "best offense," and wRC+ can certainly overrate an offense that hits poorly with men on base (the Astros rank ninth in the majors in OPS with RISP).

Still, the Astros are at .281 when the major league average is .244. They are slugging .507. Here's the complete list of teams that have slugged .500 in a season: the 2019 Astros. That's it. No team has done it for a full season. The highest since 1920 is the 2003 Red Sox at .491. Only 17 teams have slugged .475: four teams between 1927 and 1936 (including the 1927 and 1930 Yankees of Babe Ruth and Lou Gehrig listed above), 11 teams between 1994 and 2003, the 2009 Yankees and the 2017 Astros. (The Twins are currently slugging .495.)

The fact that the Astros had an all-time great offense two seasons ago is reason to believe this offense might really be this good. Six players in Monday's lineup ended the game with a slugging percentage above .500. I don't expect Robinson Chirinos to keep slugging .567 or Jake Marisnick to slug .563, but I also don't expect Jose Altuve to bat .243. Against the Tigers, the Astros forced a red-hot Matthew Boyd to throw 96 pitches in four innings. As Boyd would attest, good luck against this lineup.

Opposing starters, meanwhile, can't wait to start against the Marlins. They're hitting .219/.283/.310 as a team, a line that would make Ozzie Guillen blush (he hit .264/.287/.338 in his career). The last team with a lower slugging percentage was the 1972 Rangers, who hit .217/.290/.290 with 56 home runs. The difference, however, between those Rangers and these Marlins: The overall AL slugging mark that season was .343; the NL slugging mark in 2019 is .413.

Joe Sheehan beat me to writing about the Marlins and wrote this on Monday:

Through about a quarter of the season, the Marlins have scored 105 runs, on pace for 436. No team since 1972 has scored fewer than 500 runs, and the 1972 season was shortened a week by a player's strike. The 1971 Padres are the last team to score fewer than 500 runs (486) in a full season of play. The fewest runs any team has scored since the second Deadball Era is 468, by the expansion Padres in 1969. Just one team in the last 100 years has scored fewer than 450 runs, and that was the 1942 Phillies, a terrible team playing with altered baseballs during World War II.

The Marlins, of course, are getting to hit the cork-centered, rubber-cushioned, low-seamed nitro ball of 2019, which makes their efforts all the more impressive. When you compare them to their peers, you begin to understand just how bad they are.

The Marlins have been shut out seven times in 39 games and have scored just one run another eight times. They've been held to five or fewer hits 16 times. The amazing thing is they lead the majors with four games with at least 16 hits; only the Astros and Twins have three such games.

As we always say: You can't predict baseball.

ShoTime: Do you want to see a highlight of Shohei Ohtani hitting a home run? Yes, you do:

A patented Ohtani blast to left-center field, 429 feet with an exit velocity of 111.7 mph. Tommy La Stella added his 10th home run in the Angels' 5-4 victory over the Twins. That matches his career total entering the season -- accomplished in 947 plate appearances.

Speaking of bad offense: The White Sox beat the Indians 5-2 as Reynaldo Lopez allowed just two hits in 7⅔ innings. The Sox hit four home runs off Shane Bieber, two from Yoan Moncada:

For the slumping Indians, Terry Francona moved Jose Ramirez from third to fifth in the order. It didn't work, as Ramirez went 0-for-4 and is hitting .193/.291/.293. I get that, though -- maybe take some pressure off Ramirez or something. Jason Kipnis, however, has somehow worked his way up in the lineup, which says a lot about this lineup and nothing about Kipnis. How long do the Indians stick with him? His past three seasons:

2017: .232/.292/.414, 81 OPS+
2018: .230/.315/.389, 89 OPS+
2019: .198/.281/.267, 49 OPS+

That's more than 1,000 plate appearances of bad hitting. Kipnis had a few really nice seasons for Cleveland, but his last one came in 2016. At least with Ramirez, you can hope he finds his 2018 stroke again. The Indians need to find a second baseman.

Phillies win ugly: This tweet sums up a wet night in Philadelphia. It was a 7-4 win for the Phillies over the Brewers in a game that took 3 hours, 57 minutes after a 52-minute rain delay:

Bryce Harper, meanwhile, went 0-for-4 with three strikeouts, is hitting .222 and is on pace for 219 strikeouts. Who knew the Phillies were getting Mark Reynolds when they gave Harper $330 million?