Le spécificateur de colonne `X` n'est pas adapté à ce genre d'alignement.
C'est pratique pour des colonnes de type paragraphe.
Voici deux options.
Avec l'extension *numprint*, on utilise le spécificateur de colonne `N` : `*3{N{6}{2}}`
\documentclass[a4paper,french]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{tabularx}
\usepackage[autolanguage,np]{numprint}
\begin{document}
\begin{tabularx}{\textwidth}{X*3{N{6}{2}}}
& \textbf{Marne (51)} & \textbf{Mayotte (976)} & \textbf{France}\\
Taux de natalité (\%) & 10,7 & 37,3 & 11,3 \\
Nombre de naissances & 6069 & 9590 & 756663\\
Taux de mortalité (\%) & 9,4 & 2,8 & 9,2 \\
Espérance de vie à la naissance & 81,45 & 75,8 & 82,35\\
Âge médian & 41,4 & 17,5 & 41,1\\
PIB/hb (\euro) & 30400 & 9220 & 35124\\
\end{tabularx}
\end{document}
Avec l'extension *siunitx*, on utilise le spécificateur de colonne `S` : `*3{S[table-format=6.2]}`
\documentclass[a4paper,french]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{tabularx}
\usepackage{siunitx}
\sisetup{locale = FR}
\begin{document}
\begin{tabularx}{\textwidth}{X*3{S[table-format=6.2]}}
& \textbf{Marne (51)} & \textbf{Mayotte (976)} & \textbf{France}\\
Taux de natalité (\%) & 10,7 & 37,3 & 11,3 \\
Nombre de naissances & 6069 & 9590 & 756663\\
Taux de mortalité (\%) & 9,4 & 2,8 & 9,2 \\
Espérance de vie à la naissance & 81,45 & 75,8 & 82,35\\
Âge médian & 41,4 & 17,5 & 41,1\\
PIB/hb (\euro) & 30400 & 9220 & 35124\\
\end{tabularx}
\end{document}