There is another trick that you can use, which is to filter on local solar time.
I have used this myself to prevent overlap of orbits over the same region with a too wide time difference.
The way to do this is to add the following filter to your ingestion: derive(solar_hour_angle {time});solar_hour_angle>-90;solar_hour_angle<90
I have used -90 and 90 as arbitrary values, you can play around with these to better fit your use case.
But the -90 and 90 values do show a cut-off at the pole for S5P, which results in about the same kind of filter as what you would have gotten if you would have filtered on ascending vs. descending.
Be aware though, that since you are cutting off somewhere in the polar area (i.e. wherever you decide that the orbit should start/end) you might end up with some circular shaped artefact. Even with a pure ascending/descending filter you will likely still get some artefacts due to the swath width of S5P.
With the solar hour angle approach, if you use a range of e.g. 0 - 50, you will get a wedge shape near the poles, which will greatly reduce such artefacts.
Here’s the comparison and new monthly results.
There’re some descending data with the -90<SHA<90 filter and 0<SHA<50 greatly reduces artefacts.
Then, if we choose 0<SHA<50, that will be actually NO2 column density in the afternoon.