Join ArcGIS tables in Python of plant greenness in response to prior month's rainfall
You should do a maintainability pass before you start optimizing. In that spirit:

Imports

from datetime import datetime
import dateutil.relativedelta


should be at the top of the file, and should not be repeated. Also, this:

arcpy.env.addOutputsToMap = 0


should be moved past the imports section.

Pathlib

These:

ws1=glob.glob(r'D:\GIS_Files\NEW_LA_FULL_SERIES\ALL_DATA_2000_2020\CITY_POLYs\*.shp')
ws2 = glob.glob(r'D:\GIS_Files\NEW_LA_FULL_SERIES\ALL_DATA_2000_2020\PRECIP_preprocessed_2000_2020\CITY_ZONAL_TABLES\*.dbf')


should get a little love from pathlib:

Factor out the common directory -

data_dir = Path(r'D:\GIS_Files\NEW_LA_FULL_SERIES\ALL_DATA_2000_2020')
ws1 = (data_dir / 'CITY_POLYs').glob('*.shp')
ws2 = (data_dir / 'PRECIP_preprocessed_2000_2020' / 'CITY_ZONAL_TABLES').glob('*.dbf')


Hard-coded string slices

These:

[35:41]
[12:18]


are a nightmare. I don't know what they're actually selecting, but I can nearly guarantee that there's a better way. It seems like a slice out of a path, and paths are structured - you should not have to do indexing like this.

Nomenclature

You, currently, understand what these variables mean:

ws1
ws2
r
r2
r3
result


But no one else does, and you might not in six months. Do yourself a favour and give these meaningful names.

Logical combination

        if STR_PREV_POLY==STR_PREV_PRECIP:
            if STR_PREV_PRECIP==basename_FINAL:


should simply be

if STR_PREV_POLY == basename_FINAL:


That intermediate variable has no effect.