Как работает numpy.random.choice с заменой? - PullRequest
2 голосов
/ 16 октября 2019

Задача - выбрать 1000 клиентов случайным образом. В наборе данных количество строк и уникальных идентификаторов совпадают.

Я выбираю случайным образом, а затем пытаюсь выбрать набор данных с выбранными идентификаторами:

from numpy.random import choice
ids = choice(df.id, 1000)
df[df.id.isin(ids)]

В результате получаетсясовсем другое: размер df[df.id.isin(ids)] равен 917. Почему нет 1000 строк?

1 Ответ

3 голосов
/ 16 октября 2019

Значение по умолчанию для np.random.choice() - выборка с заменой, replace=True.

Учитывая размер выборки 1000, вполне вероятно, что врезультирующий образец.

Например,

>>> import pandas as pd                                                                                                                                      
>>> import numpy as np                                                                                                                                       
>>> np.random.seed(444)                                                                                                                                      
>>> s = pd.Series(list(range(1000)))                                                                                                                         
>>> ids = np.random.choice(s, 1000)                                                                                                                          
>>> s[s.isin(ids)].count()                                                                                                                                   
623
>>> ids_no_rep = np.random.choice(s, 1000, replace=False)                                                                                                    
>>> s[s.isin(ids_no_rep)].count()                                                                                                                            
1000

Если вы хотите перетасовать значения этого столбца на месте, вы можете вызвать np.random.shuffle(df["col"].values) для этого столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...