I suggest you perform an interpolation of the spectrum in the linear domain, according to the code below:
from scipy import interpolate
f_lin = np.arange(180, 7040) # the range of test frequencies
# a function that we use to test the interpolation
H_lin_func = lambda f: np.sin(2*np.pi*0.001*f) * np.cos(2*np.pi*0.00011*f)
# Frequencies of the measured samples
input_samples = np.logspace(np.log10(180), np.log10(7040), 128)
# Frequencies where we want to interpolate to
output_samples = np.logspace(np.log10(180), np.log10(7040), 42)
# "measure" the function at the 128 known points
H_at_input_samples = H_lin_func(input_samples)
# Interpolate to the 42 points
interpolationFunc = interpolate.interp1d(input_samples, H_at_input_samples)
H_at_output_samples = interpolationFunc(output_samples)
# plot the results
plt.figure(figsize=(10,6))
plt.plot(f_lin, H_lin_func(f_lin), label='Original function')
plt.plot(input_samples, H_at_input_samples, 'rx', label='Input samples')
plt.plot(output_samples, H_at_output_samples, 'go', label='Output samples')
plt.grid(True)
plt.legend()
In the code, I present an (arbitrary) function H_lin_func, which represents the original spectrum we have sampled. Then, we create an interpolation function (e.g. using scipy.interpolate) with the measured samples. Then, finally we call the interpolation function with the samples where we want to know the interpolated values.
As you see, there are more samples at the lower frequencies, due to the log-spacing. However, also for the wider spacing at higher frequencies the interpolation works fine.
EDIT for as a comment from hotpaw2: This interpolation to fewer samples is essentially a downsampling operation, which is vulnerable to aliasing. In "normal" systems, aliasing is not a problem, if the sampling frequency after downsampling is still 2 times the bandwith of the original signal. However, you have a special case that your samples are not equally spaced, but log-spaced. So, I would say your spectrum needs to be band-limited in the log domain to prevent aliasing. If this is not the case you'd need to apply an anti-aliasing filter in the log domain and then interpolate/downsample. More info about aliasing in general can be found in this question and this article.