随机排列除第一行以外的 DataFrame 行

Shuffle DataFrame rows except the first row

我正在尝试随机化数据框中除第一行之外的所有行。我希望第一行总是先出现,其余行可以按任何随机顺序排列。

我的数据框是:

 df = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])

关于我如何处理这个问题有什么建议吗?

试试这个:

df = pd.concat([df[:1], df[1:].sample(frac=1)]).reset_index(drop=True)

测试:

In [38]: df
Out[38]:
          a         b         c         d         e
0  2.070074  2.216060 -0.015823  0.686516 -0.738393
1 -1.213517  0.994057  0.634805  0.517844 -0.128375
2  0.937532  0.814923 -0.231120  1.970019  1.438927
3  1.499967  0.105707  1.255207  0.929084 -3.359826
4  0.418702 -0.894226 -1.088968  0.631398  0.152026
5  1.214119 -0.122633  0.983818 -0.445202 -0.807955
6  0.252078 -0.258703 -0.445209 -0.179094  1.180077
7  1.428827 -0.569009 -0.718485  0.161108  1.300349
8 -1.403100  2.154548 -0.492264 -0.544538 -0.061745
9  0.468671  0.004839 -0.738240 -0.385624 -0.532640

In [39]: df = pd.concat([df[:1], df[1:].sample(frac=1)]).reset_index(drop=True)

In [40]: df
Out[40]:
          a         b         c         d         e
0  2.070074  2.216060 -0.015823  0.686516 -0.738393
1  0.468671  0.004839 -0.738240 -0.385624 -0.532640
2  0.418702 -0.894226 -1.088968  0.631398  0.152026
3 -1.213517  0.994057  0.634805  0.517844 -0.128375
4  1.428827 -0.569009 -0.718485  0.161108  1.300349
5  0.937532  0.814923 -0.231120  1.970019  1.438927
6  0.252078 -0.258703 -0.445209 -0.179094  1.180077
7  1.499967  0.105707  1.255207  0.929084 -3.359826
8 -1.403100  2.154548 -0.492264 -0.544538 -0.061745
9  1.214119 -0.122633  0.983818 -0.445202 -0.807955

使用numpyshuffle

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(100).reshape(20, 5), columns=list('ABCDE'))

np.random.shuffle(df.values[1:, :])
print df

     A   B   C   D   E
0    0   1   2   3   4
1   55  56  57  58  59
2   10  11  12  13  14
3   80  81  82  83  84
4   90  91  92  93  94
5   70  71  72  73  74
6   25  26  27  28  29
7   40  41  42  43  44
8   65  66  67  68  69
9    5   6   7   8   9
10  45  46  47  48  49
11  85  86  87  88  89
12  15  16  17  18  19
13  30  31  32  33  34
14  60  61  62  63  64
15  20  21  22  23  24
16  35  36  37  38  39
17  95  96  97  98  99
18  75  76  77  78  79
19  50  51  52  53  54

np.random.shufflendarray 洗牌到位。 dataframe 只是 ndarray 的包装器。您可以使用 values 属性访问 ndarray。要指定除第一行以外的所有行都被移动,请对数组切片 [1:, :].

进行操作