I am using Python pyproj to convert xyz values of Louisiana, USA region from NAD27 + NGVD29 height (ftUS) to NAD27 + NAVD88 height (ftUS). So, I am not changing the horizontal projection (because it's NAD27 for both), only the vertical projection is changing from NGVD29 to NAVD88.However, NAD83 + NAVD88 height (ftUS) should also work because NAD83 and NAD27 are almost same.
here is a sample code for a point (-89.8469444,31.23777778,2.73) where input height is 2.73 ft.
from pyproj import Transformer
from pyproj import CRS
#"epsg:7406" for NAD27 + NGVD29 height (ftUS)
t = Transformer.from_crs("epsg:7406", "epsg:8744", always_xy=True)#x is lon, y is lat
t = Transformer.from_crs("epsg:5702", "epsg:6360", always_xy=True)# only z conversion
a=t.transform(-89.8469444,31.23777778,2.73)
print(a)
#CRS("epsg:8743") # Louisiana North
output:
(3745443.9938408486, 998779.7596375213, 2.73)
So, the code gives me 2.73 ft as output but the right result should be 2.267 ft. Here is a NOAA site where I can verify the output should be 2.267 ft(just select Horizontal+height, Geodetic lat-long and Orthometric tabs, unit of height to US Survey feet). Here is another NOAA Vdatum site for the datum conversion which also gives me 2.267 ft.