Here's the final Pythagorean table for the French league. It might be useful to compare this table to a similar one taken at the halfway mark of the season.
Not much of a surprise at the top; if you score the most goals in the league, you should be able to win it as long as you don't allow too many goals, and that's what Marseille achieved. Marseille came alive in the second half of the season, but so did Auxerre and Lyon. Bordeaux fell off the pace in the second half if you look at their statistical expectations — they ran out of gas after they were knocked out of the Champions League. The real surprise outfit in Ligue 1 was Montpellier. They played at a consistently high level over the course of the season, which is really impressive for a recently promoted side.
PSG were an underachieving side at the midpoint of the season, and they stayed that way in the second half. The French Cup conquest rescued what would have been a very disappointing season. And Grenoble were out of their depth in Ligue 1 but nevertheless were a poor side.
Aside from Auxerre and Montpellier, the big overachiever was Sochaux. Charlie Davies' side should have been relegated if you looked at their goal totals, but they managed to eke out enough 1-0 wins (including away defeats of Lyon and Auxerre) to stay up.