Need help smoothening the red graph below to something that looks like blue graph.
I have tried moving average, problem with that is, it didn't remove the noise, further shifts the position of the curve. I would like to maintain the same position and area under the curve (here it is 100%). Is fitting multiple small curves the solution here? or is a way to fit a curve to this in python or excel?

You have several options available. For instance, you could either use a Gaussian or a Savitzky-Golay filter.
Considering a noisy signal (1D numpy array), like this one:
the following snippet allows you to denoise it. Change the parameters according to your particular use case:
and zooming-in to see more details: