首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Dataframe:对行组进行混洗

Python Dataframe:对行组进行混洗
EN

Stack Overflow用户
提问于 2018-08-10 05:24:44
回答 3查看 414关注 0票数 1

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

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

EN

回答 3

Stack Overflow用户

发布于 2018-08-10 06:01:53

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

代码语言:javascript
运行
复制
groups = [df.sample(frac=1) for _, df in df.groupby('index_to_group_on')]
return pandas.concat(groups)

例如,如果您希望对每组10行进行混洗,则可以通过以下方式创建此索引:

代码语言:javascript
运行
复制
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

票数 0
EN

Stack Overflow用户

发布于 2018-08-10 06:57:36

也可能有其他方式,一种方式可能是使用sklearnshuffle。您可以对要混洗的n行进行切片,并使用append将剩余的其他行转换为混洗后的行的结果。

代码语言:javascript
运行
复制
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:])
票数 0
EN

Stack Overflow用户

发布于 2018-08-10 07:23:22

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

代码语言:javascript
运行
复制
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')]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51776744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档