1

在数据框中打乱一组行的最佳方法是什么?需要这个模型的洗牌训练集。

例如,将每 10 行打乱为一个单独的组,或者有一些逻辑条件来创建单独的组并将它们打乱为一个组。

4

3 回答 3

0

您可以做的是 - 创建一个标识组的列,然后按该列分组,然后对每个组进行随机洗牌。

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')]
于 2018-08-09T23:23:21.650 回答
0

如果您使用要分组的索引创建一个新列,则可以执行以下操作:

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 的train_test_splithttp ://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

于 2018-08-09T22:01:52.733 回答
0

也可能有其他方法,一种方法可能是使用shufflefrom sklearnn您可以将要混洗的行和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:])
于 2018-08-09T22:57:36.097 回答