xtabs = df.groupby(df.columns.tolist()).size().unstack([2, 1]).sort_index(1
    ).fillna(0).astype(int)
pd.concat([xtabs.stack().sum(1).rename('total').to_frame().unstack(), xtabs
    ], axis=1)
Merging crosstabs in Python