Calculates V(n+1/n) values. Useful for establishing the quality of
    your normalization regime. See Vandesompele 2002 for advice on
    interpretation.

    :param DataFrame nfs: A matrix of all normalization factors, produced by
       `calculate_all_nfs`.
    :return: a Series of values [V(2/1), V(3/2), V(4/3), ...].

def calculate_v(nfs):
    """Calculates V(n+1/n) values. Useful for establishing the quality of
    your normalization regime. See Vandesompele 2002 for advice on
    interpretation.

    :param DataFrame nfs: A matrix of all normalization factors, produced by
       `calculate_all_nfs`.
    :return: a Series of values [V(2/1), V(3/2), V(4/3), ...].
    """
    v = []
    if (nfs.columns != range(1, nfs.columns[-1]+1)).any():
        raise ValueError("Column names invalid in nf_v_frame")
    for i in nfs.columns[:-1]:
        v.append(std(log2(nfs[i]/nfs[i+1]), ddof=1))
    return pd.Series(v, index=nfs.columns[:-1])