def dataframe_tptnfpfn(df, pos_label=True, labels=None):
labels = df.columns if labels is None else labels<EOL>neg_labels = [label for label in labels if label != pos_label]<EOL>tp = df[pos_label][pos_label]<EOL>tn = sum(df[pred_label][true_label] for true_label in neg_labels for pred_label in neg_labels)<EOL>fp = df[pos_label][neg_labels].sum()<EOL>fn = sum(df[label][pos_label] for label in neg_labels)<EOL>return tp, tn, fp, fn<EOL>
Count the True Pos, True Neg, False Pos, False Neg samples within a confusions matrx (potentiall larger than 2x2)
    >>> matrix = [[5, 3, 0], [2, 3, 1], [0, 2, 11]]
    >>> columns=['Cat', 'Dog', 'Rabbit']
    >>> x = np.array([[tc, pc] for (tc, row) in enumerate(matrix) for (pc, n) in enumerate(row) for i in range(n)])
    >>> c = Confusion([(columns[i], columns[j]) for (i, j) in x], columns=['Actual', 'Predicted'])
    >>> c
    Predicted  Cat  Dog  Rabbit
    Actual
    Cat          5    3       0
    Dog          2    3       1
    Rabbit       0    2      11
    >>> dataframe_tptnfpfn(c, 'Rabbit')
    (11, 13, 1, 2)
    >>> dataframe_tptnfpfn(c.T, 'Rabbit')
    (11, 13, 2, 1)
    >>> c.mcc[2]
    0.77901...