def get_monthly_mean(df, datecolname='Date'):
    """Return the monthly mean of each columns of a dataframe

    It does not modify the input dataframe.

    Parameters
    ----------

    df : pd.DataFrame
        the dataframe
    datecolname : str, default 'Date',
        the name of the date column

    Returns
    -------

    dftmp : pd.DataFrame with a "month" column
    dfmean : pd.DataFrame with the monthly mean of each column

    """
    dftmp = df.copy()
    dftmp['month'] = dftmp[datecolname].apply(lambda x: x.month)
    dftmp = dftmp.groupby('month')
    dfmean = dftmp.mean()
    return dftmp, dfmean
