Python数据框:随机排列行

时间:2018-08-09 21:24:44

标签: python machine-learning-model dataframe

在数据帧中随机排列一组行的最佳方法是什么?需要使用此模型来改组模型。

例如,每隔10行作为一个单独的组进行洗牌,或者具有一定的逻辑条件以创建单独的组并将它们作为一个组洗牌。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

也可能有其他方法,一种方法可能是使用sorted(data, key=lambda x: x['value']) 中的shuffle。您可以使用sklearn将要洗牌的n行切片,并将append其余的其他行切成洗排行的结果。

.append

答案 2 :(得分: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')]