При выборке строк (без веса) важны только n
, количество строк и выбор замены.Это генерирует индексы .iloc
для принятия независимо от данных.
Для строк выборка происходит как;
axis_length = self.shape[0] # DataFrame length
rs = pd.core.common.random_state(random_state)
locs = rs.choice(axis_length, size=n, replace=replace, p=weights) # np.random_choice
return self.take(locs, axis=axis, is_copy=False)
Просто для иллюстрации точки
Пример данных
import pandas as pd
import numpy as np
n = 100000
np.random.seed(123)
df = pd.DataFrame({'id': list(range(n)), 'gender': np.random.choice(['M', 'F'], n)})
df1 = pd.DataFrame({'id': list(range(n)), 'gender': ['M']},
index=np.random.choice(['foo', 'bar', np.NaN], n)).assign(blah=1)
Выборка всегда будет выбирать строку 42083
(индекс целочисленного массива): df.iloc[42803]
для этого семени и длины:
df.sample(n=1, random_state=123)
# id gender
#42083 42083 M
df1.sample(n=1, random_state=123)
# id gender blah
#foo 42083 M 1
df1.reset_index().shift(10).sample(n=1, random_state=123)
# index id gender blah
#42083 nan 42073.0 M 1.0
Четный ноль:
np.random.seed(123)
np.random.choice(df.shape[0], size=1, replace=False)
#array([42083])