You can use Qiskit's partial_trace
functionality on the final Statevector. Here's code that builds up the final statevector for your circuit, then traces over the first 2 qubits to yield the reduced density matrix (works on the latest version of Qiskit):
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.quantum_info.states import Statevector, partial_trace
from qiskit.visualization import plot_state_city
q0 = QuantumRegister(2, 'q0')
q1 = QuantumRegister(2, 'q1')
circuit = QuantumCircuit(q0, q1)
circuit.h(q1[1])
circuit.cswap(q1[1], q1[0], q0[1])
circuit.cx(q1[0], q0[0])
circuit.cx(q0[1], q0[0])
circuit.ccx(q0[0], q1[1], q0[1])
zero_state = Statevector.from_label('0000')
final_state = zero_state.evolve(circuit)
reduced_state = partial_trace(final_state, [0, 1])
plot_state_city(reduced_state.data)
