def split_dataframe(df, row_labels_to_move, col_labels_to_move, row_level=1, col_level=0):
mv_rows = select_from_labels(df, row_labels_to_move, axis=0, level=row_level)
kp_rows = select_from_labels(df, row_labels_to_move, axis=0, level=row_level, invert=True)
mv_cols = select_from_labels(df, col_labels_to_move, axis=1, level=col_level)
kp_cols = select_from_labels(df, col_labels_to_move, axis=1, level=col_level, invert=True)
kp_df = extract_subtable_by_labels(df, kp_rows, kp_cols, row_level, col_level)
new_row_df = extract_subtable_by_labels(df, kp_rows, mv_cols, row_level, col_level)
new_col_df = extract_subtable_by_labels(df, mv_rows, kp_cols, row_level, col_level)
new_row_col_df = extract_subtable_by_labels(df, mv_rows, mv_cols, row_level, col_level)
return kp_df, new_row_df, new_col_df, new_row_col_df