This code:

liczba_rowerow_na_stacji = [10, 10, 10, 10, 10]
brak_roweru = [0, 0, 0, 0, 0]
overrun = [0, 0, 0, 0, 0]
czas = 0
popyt_stacji = [0.3, 0.3, 0.2, 0.1, 0.1]
prawdopodobienstwo_stacji = [
    0.05 0.45 0.3 0.1 0.1;
    0.43 0.07 0.1 0.2 0.2;
    0.34 0.2 0.06 0.2 0.2;
    0.2 0.2 0.2 0.05 0.35;
    0.1 0.1 0.1 0.67 0.03]
ongoing = []  # Keep track of ongoing journeys
wynik_sim_init = [liczba_rowerow_na_stacji, brak_roweru, overrun, czas]

function single_sim(wynik_sim = wynik_sim_init,
                    prawdopodobienstwo_stacji = prawdopodobienstwo_stacji,
                    popyt_stacji = popyt_stacji,
                    czas_przejazdu = 1,
                    ongoing_journeys = ongoing)
    # First update ongoing journeys
    for i in length(ongoing_journeys):-1:1
        journey = ongoing_journeys[i]
        journey[3] -= czas_przejazdu
        if journey[3] <= 0
            # The journey is completed
            wynik_sim[1][journey[2]] += 1  # Add the bike to the destination station
            if wynik_sim[1][journey[2]] >= 15
                wynik_sim[3][journey[2]] += 1
                wynik_sim[1][journey[2]] -= 3
                wynik_sim[1][argmin(wynik_sim[1])] += 3
            end
            # Remove the journey from the ongoing_journeys list
            splice!(ongoing_journeys, i)
        end
    end
    
    stacja_odebrania = rand(Categorical(popyt_stacji))
    stacja_oddania = rand(Categorical(prawdopodobienstwo_stacji[stacja_odebrania, :]))
    
    if wynik_sim[1][stacja_odebrania] >= 1
        wynik_sim[1][stacja_odebrania] -= 1  # Remove a bike from the pickup station
        journey = [stacja_odebrania, stacja_oddania, czas_przejazdu]
        push!(ongoing_journeys, journey)  # Add the journey to the ongoing_journeys list
    else
        wynik_sim[2][stacja_odebrania] += 1  # Increase the number of unavailable bikes
    end
    
    wynik_sim[4] += czas_przejazdu
    return wynik_sim
end

function run_day(liczba_dzienna,
                wynik_sim = wynik_sim_init,
                prawdopodobienstwo_stacji = prawdopodobienstwo_stacji,
                czas_przejazdu = 1)
    wynik_sim_init = deepcopy(wynik_sim)
    for i in range(1, liczba_dzienna)
        wynik_sim = single_sim(wynik_sim_init, prawdopodobienstwo_stacji, popyt_stacji, czas_przejazdu)
    end
    return wynik_sim
end

function run_sims(liczba_sim = 30,
                liczba_dzienna = 40,
                wynik_sim = wynik_sim_init,
                prawdopodobienstwo_stacji = prawdopodobienstwo_stacji,
                czas_przejazdu = 1)
    wynik_sim_init = deepcopy(wynik_sim)
    wyniki_okresu = DataFrame(dzien=Int[], czas=Float64[], nr_stacji=Int[], 
                            liczba_na_koniec_dnia = Int[], braki_na_koniec_dnia = Int[], przewoz=Int[])
    for i in range(1, liczba_sim)
        wynik_dnia = run_day(liczba_dzienna, wynik_sim, prawdopodobienstwo_stacji, czas_przejazdu)
        temp_df = DataFrame(dzien=fill(i,5), czas=fill(wynik_dnia[4],5), nr_stacji=1:5,
                         liczba_na_koniec_dnia=wynik_dnia[1], braki_na_koniec_dnia=wynik_dnia[2], przewoz=wynik_dnia[3])
        wyniki_okresu = vcat(wyniki_okresu, temp_df)
        wynik_sim = wynik_sim_init
    end
    wynik_sim = wynik_sim_init
    return wyniki_okresu
end

wynik_sim_init = [deepcopy(liczba_rowerow_na_stacji), deepcopy(brak_roweru), deepcopy(overrun), czas]
wyniki_okresu = run_sims()

Gives this resluts:
Row	dzien	czas	nr_stacji	liczba_na_koniec_dnia	braki_na_koniec_dnia	przewoz
Int64	Float64	Int64	Int64	Int64	Int64
1	1	40.0	1	12	0	0
2	1	40.0	2	4	0	0
3	1	40.0	3	8	0	0
4	1	40.0	4	12	0	0
5	1	40.0	5	13	0	1
6	2	40.0	1	9	0	0
7	2	40.0	2	13	0	0
8	2	40.0	3	8	0	0
9	2	40.0	4	13	0	1
10	2	40.0	5	7	0	0
11	3	40.0	1	13	0	0
12	3	40.0	2	4	0	0
13	3	40.0	3	6	0	0
⋮	⋮	⋮	⋮	⋮	⋮	⋮
139	28	40.0	4	12	0	2
140	28	40.0	5	10	0	0
141	29	40.0	1	9	0	0
142	29	40.0	2	8	0	0
143	29	40.0	3	11	0	0
144	29	40.0	4	12	0	2
145	29	40.0	5	10	0	0
146	30	40.0	1	7	0	0
147	30	40.0	2	12	0	0
148	30	40.0	3	8	0	0
149	30	40.0	4	9	0	0
150	30	40.0	5	14	0	1

The whole point was to add time to this simulation and make wynik_sim[1][stacja odbioru] updated after some time. There is a mistake in logic here. Try diffrent approach.