如何在python数据帧中不进行重复地随机化?

问题描述 投票:-1回答:2

对于一个数据帧,我如何将其随机化以使其真正地混合在一起?这样原始表中彼此相邻的行就不再在一起了。

例如,此表。

U         A         B         C
0  1.438161 -0.210454         0
1 -0.283780 -0.371773         0
2  0.552564 -0.610548         0
3  1.931332  0.649179         1
4  1.656010 -1.373263         1
5  0.142682 -0.657849         1
6  1.754264 -0.610548         0
7  1.341232  0.649179         0
8  1.656010 -1.373263         0
9  0.944862 -0.657849         0

如何使它看起来像这样? (通过随机分组)

U         A         B         C
1 -0.283780 -0.371773         0
3  1.931332  0.649179         1
0  1.438161 -0.210454         0
4  1.656010 -1.373263         1
8  1.656010 -1.373263         0
6  1.754264 -0.610548         0
2  0.552564 -0.610548         0
7  1.341232  0.649179         0
9  0.944862 -0.657849         0
5  0.142682 -0.657849         1

注意,第二个表中的索引号没有任何以连续顺序增加或减少的值(即,没有6、7或4,3)

python pandas dataframe random sample
2个回答
1
投票

这应该做您所需要的(真正随机意味着在一起之后的行可能仍然在一起):

df.sample(frac=1)

[frac是要返回的结果的分数,1表示全部。

[此处有更多文档https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sample.html


0
投票

您可以重新排列数据框中的每一列,然后合并结果。

np.random.seed(0)
>>> pd.concat([df[col].sample(frac=1).set_axis(df.index, axis=0) for col in df], axis=1)
   U         A         B  C
0  2  1.931332 -0.610548  0
1  8  0.142682  0.649179  0
2  4 -0.283780 -1.373263  0
3  9  0.552564 -1.373263  0
4  1  0.944862 -0.657849  0
5  6  1.656010 -0.371773  1
6  7  1.438161 -0.210454  0
7  3  1.754264 -0.610548  0
8  0  1.341232 -0.657849  1
9  5  1.656010  0.649179  1
© www.soinside.com 2019 - 2024. All rights reserved.