我有1到80个数字的DataFrame,我如何随机获得20个元素并将结果保存到另一个DataFrame?我不能像行一样保存每个列表。它的保存元素像一列。将来我想尝试使用sklearn预测每个随机元素
a = np.arange(1,81).reshape(8,10)
pd.DataFrame(a)
我必须获取20个唯一数字并将其写成一行。例如在python中:
from random import sample
for x in range(1,20):
i=sample(range(1,81), k=20)
i.sort()
print(x,'-',i)`
它作为列表[1,3,5,8,34,45,12,76,45 ...] 20个元素返回,我希望它看起来像:
0 1 2 3 4 5 6 7 8 9 10 11 12 ... 20
0 1 5 10 14 20 55 67 34 ...... 20 elements
1
.
.
答案 0 :(得分:6)
使用df.sample()
获取每个数据帧的数据样本:
a = np.arange(1,81).reshape(8,10)
df = pd.DataFrame(a)
df1= df.sample(frac=.25)
>>df1
0 1 2 3 4 5 6 7 8 9
5 51 52 53 54 55 56 57 58 59 60
3 31 32 33 34 35 36 37 38 39 40
对于随机排列np.random.permutation()
:
df.iloc[np.random.permutation(len(df))].head(2)
0 1 2 3 4 5 6 7 8 9
6 61 62 63 64 65 66 67 68 69 70
1 11 12 13 14 15 16 17 18 19 20
编辑:要获取列表中的20个元素,请使用:
import itertools
list(itertools.chain.from_iterable(df.sample(frac=.25).values))
#[71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
frac=.25
表示数据的25%
,因为您使用了80
个元素25%
为您提供了20
个元素,因此您可以根据自己的需要调整分数你有多少元素,想要多少?
EDIT1::在问题的进一步编辑过程中:print(df.values)
为您提供了一个数组:
[[ 1 2 3 4 5 6 7 8 9 10]
[11 12 13 14 15 16 17 18 19 20]
[21 22 23 24 25 26 27 28 29 30]
[31 32 33 34 35 36 37 38 39 40]
[41 42 43 44 45 46 47 48 49 50]
[51 52 53 54 55 56 57 58 59 60]
[61 62 63 64 65 66 67 68 69 70]
[71 72 73 74 75 76 77 78 79 80]]
您将需要使用np.random.shuffle
对此数组进行混洗,在这种情况下,请在df.T.values
上进行此处理,因为您还希望对列进行混洗:
np.random.shuffle(df.T.values)
然后进行重塑:
df1 = pd.DataFrame(np.reshape(df.values,(4,20)))
>>df1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
0 4 3 10 2 8 7 1 5 6 9 14 13 20 12 18 17 11 15 16 19
1 24 23 30 22 28 27 21 25 26 29 34 33 40 32 38 37 31 35 36 39
2 44 43 50 42 48 47 41 45 46 49 54 53 60 52 58 57 51 55 56 59
3 64 63 70 62 68 67 61 65 66 69 74 73 80 72 78 77 71 75 76 79
答案 1 :(得分:1)
这是使用现有stackoverflow答案的简单方法:
1-将数组弄平,使其看起来更像一个列表,将使您仅处理一个索引而不是处理两个数组索引
https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.ndarray.flatten.html
aflat = a.flatten()
2-从展平的数组中选择随机项,这里有任何答案
How to randomly select an item from a list?
3-使用选定的数据,构建数据框
答案 2 :(得分:1)
您还可以使用numpy.random.choice
,并且您可以从示例中指定所需的确切行:
In [263]: a = np.arange(1,81).reshape(8,10)
In [265]: b = pd.DataFrame(a)
In [268]: b.iloc[np.random.choice(np.arange(len(b)), 5, False)]
Out[268]:
0 1 2 3 4 5 6 7 8 9
5 51 52 53 54 55 56 57 58 59 60
7 71 72 73 74 75 76 77 78 79 80
3 31 32 33 34 35 36 37 38 39 40
1 11 12 13 14 15 16 17 18 19 20
4 41 42 43 44 45 46 47 48 49 50
您可以根据需要将5
更改为20
。您不必担心百分位数。