Armature Detaches When Joining Objects
Check if the head and the body share the same name of any vertex group, in that case rename one of them before making any joint. Then you should be able to join the armatures, join the meshes and have everything working as expected. 

Remember that the order in which you select the two objects to join matters: the selected object will be part of the ACTIVE object, and will inherit its name, so - if something doesn't work, probably the armature modifier of the joined model is pointing to the armature with the wrong name, and you will have to simply choose the correct name in the modifier field.

All weights should remain untouched.

At now, as Moonboots said, the head has an armature modifier that is pointing to a non existing armature, if you change this, selecting the new jointed armature in the head's armature modifier, the head should return in its correct position.