Python Dataframe: перемешать группу строк

Каков наилучший способ перетасовать группу строк во фрейме данных? Нужно это для перетасованного набора поездов модели.

Например, перемешивайте каждые 10 строк в качестве отдельной группы или создайте некоторое логическое условие для создания отдельных групп и перемешивания их как группы.

3 ответа

Там могут быть и другие способы, один из них может быть использование shuffle от sklearn, Вы можете нарезать n строки, которые вы хотите перемешать и append остальные строки с помощью .append в результате перемешанных строк.

from sklearn.utils import shuffle

# if df is the dataframe to then:
n = 10 # number of rows to shuffle
shuffled_df = shuffle(df[:n]).append(df[n:])

Что вы можете сделать - создать столбец, который идентифицирует группу, а затем группировать по этому столбцу, после чего следует случайное перемешивание каждой группы.

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df['group_id'] = np.arange(df.shape[0]) // 10  # // is integer division in python3, won't work in python2
shuffled_groups = [v.drop(['group_id'], axis=1).sample(frac=1).reset_index(drop=True) for k, v in df.groupby('group_id')]

Если вы создадите новый столбец с индексом, по которому вы группируете, вы можете сделать что-то вроде:

groups = [df.sample(frac=1) for _, df in df.groupby('index_to_group_on')]
return pandas.concat(groups)

Если, например, вы хотите перетасовать каждую группу из 10 строк, вы можете создать этот индекс с помощью:

df['group_of_ten'] = numpy.arange(len(df)/10)

Если вы пытаетесь сделать перекрестную проверку, вы можете посмотреть в Scikit-Learn's train_test_split: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

Другие вопросы по тегам