Because if you use multiple environments then you can have multiple DataFrames installed at the same time, but you don’t want these to overwrite the same precompile file.
The function that names it is located here
The part before the underscore is determined based on the uuid and the version of the package.
The part after the underscore is based on the project, the sysimage, the julia binary and something called “preferences” (GitHub - JuliaPackaging/Preferences.jl: Project Preferences Package).
When loading a package, if an existing precompile file is valid, it will be used. Otherwise a new will be created, up to a maximum of 10 files. Then it starts to recycle.