除第一行之外的Shuffle DataFrame行

时间:2016-05-31 22:23:32

标签: python pandas numpy dataframe shuffle

我试图将数据帧中的所有行随机化,除了第一行。我希望第一行始终首先显示,其余行可以按任意随机顺序排列。

我的数据框是:

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

有关我如何处理此问题的任何建议?

2 个答案:

答案 0 :(得分:5)

试试这个:

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

答案 1 :(得分:3)

使用numpy的{​​{1}}

shuffle

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属性访问ndarray。要指定除第一行以外的所有行都被抽空,请对数组切片values进行操作。