2016-06-28 11 views
8

Скажем, у меня есть кадр данных со 100 000 элементами и вы хотите разбить его на 100 разделов по 1000 записей.Случайная выборка подмножества кадра данных в Pandas

Как взять случайный образец, скажем, размер 50 только одного из 100 разделов. набор данных уже упорядочен таким образом, что первые 1000 результатов являются первым разделом следующего раздела следующего и так далее.

большое спасибо

+0

'df.iloc [np.random.randint (1,1000,50) ,:]'. 'df1' является одним из 100 разделов. – Abdou

ответ

4

Одним из решений является использование функции choice из NumPy.

Допустим, вы хотите 50 записей из 100, вы можете использовать:

import numpy as np 
chosen_idx = np.random.choice(1000, replace=False, size=50) 
df_trimmed = df.iloc[chosen_idx] 

Это, конечно, не принимая во внимание структуру блока. Если вы хотите, образец 50 элемента из блока i, например, вы можете сделать:

import numpy as np 
block_start_idx = 1000 * i 
chosen_idx = np.random.choice(1000, replace=False, size=50) 
df_trimmed_from_block_i = df.iloc[block_start_idx + chosen_idx] 
10

Вы можете использовать метод sample *:

In [11]: df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], columns=["A", "B"]) 

In [12]: df.sample(2) 
Out[12]: 
    A B 
0 1 2 
2 5 6 

In [13]: df.sample(2) 
Out[13]: 
    A B 
3 7 8 
0 1 2 

* На одной из секций DataFrames.

Примечание: Если у вас есть больший размер выборки, размер DataFrame приведет к возникновению ошибки, если вы не попробуете с заменой.

In [14]: df.sample(5) 
ValueError: Cannot take a larger sample than population when 'replace=False' 

In [15]: df.sample(5, replace=True) 
Out[15]: 
    A B 
0 1 2 
1 3 4 
2 5 6 
3 7 8 
1 3 4