Help me calculate which transistor I need
The voltage applied between the base of the NPN transistor and its emitter controls the current flowing between collector and emitter. Transistors can be operated in a variety of modes, but in your case you simply want to use the transistor as a way to switch a big voltage using a small one (i.e. "saturated"). In this case, you just need to provide a voltage above about 0.7V between the transistor's base and emitter. This voltage is pretty standard for most BJT transistors (e.g. BC109). The 3.3V you plan to use is perfectly fine. Transistors have some upper voltage limit, but definitely much higher than 3.3V.

You also need to put a resistor in series with the 3.3V to limit the current flowing into the transistor's base. The current you allow to flow into the base sets the current allowed to flow between the collector and emitter, with some gain factor, typically 100 or more. So, if you know the current you want to flow through the relay, just divide this number by around 100 to get the current you need to supply to the base. Because the base should be at least 0.7V above ground, take your 3.3V, subtract 0.7V to get 2.6V (the voltage you should drop over the resistor), and divide this by the current you worked out that you need at the base to arrive at the resistor to choose. You may wish to provide more current to the base just to be safe, by choosing a slightly lower resistor. A lower resistor won't hurt, up until the current it allows to flow exceed's the transistor's absolute maximum base current rating.

The solenoid's current requirement will determine the resistor to use. Depending on the solenoid, you may find your Raspberry Pi cannot drive the current you need.

Since you're driving a reactive load (the solenoid stores energy in its magnetic field, which will discharge in the opposite direction once power is removed), you should put a large diode (e.g. 1N4148) in parallel to absorb the energy, otherwise this could hurt the transistor.