Если вам нужно разделить свои данные по столбцу lables в вашем наборе данных, вы можете использовать это:
def split_to_train_test(df, label_column, train_frac=0.8):
train_df, test_df = pd.DataFrame(), pd.DataFrame()
labels = df[label_column].unique()
for lbl in labels:
lbl_df = df[df[label_column] == lbl]
lbl_train_df = lbl_df.sample(frac=train_frac)
lbl_test_df = lbl_df.drop(lbl_train_df.index)
print '\n%s:\n---------\ntotal:%d\ntrain_df:%d\ntest_df:%d' % (lbl, len(lbl_df), len(lbl_train_df), len(lbl_test_df))
train_df = train_df.append(lbl_train_df)
test_df = test_df.append(lbl_test_df)
return train_df, test_df
и использовать его:
train, test = split_to_train_test(data, 'class', 0.7)
вы также может передавать random_state, если вы хотите контролировать случайную разбивку или использовать какое-либо глобальное случайное семя.