Вы можете использовать группирование и преобразование для получения среднегодовых значений. Присвойте это новому столбцу, и вы готовы построить график.
ts_mo['Year_mean'] = ts_mo.groupby(ts_mo.index.year)['Value'].transform('mean')
Полный пример:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(400)
ts_mo = pd.DataFrame({
'date': pd.date_range(start='2016',end='2018', freq='M'),
'Value': np.random.randint(0,100, size=24)
}).set_index('date')
ts_mo['Year_mean'] = ts_mo.groupby(ts_mo.index.year)['Value'].transform('mean')
ts_mo.plot(x=ts_mo.index, y=['Value','Year_mean'])
plt.show()
Возвращает:
![enter image description here](https://i.stack.imgur.com/jW1r5.png)