Предположим, у меня есть фрейм данных, который я хочу сэмплировать
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,10,size=(100,2)),columns=list('AB'))
Если у нас есть
s = df.sample(5)
print(s)
Мы получаем кадр длины 5, который подсказывает мне, что это индексы, которые имеютбыл выбран случайным образом, а затем возвращена каждая строка.
Однако, если я запустил
t = df.apply(lambda x: x.sample(5))
print(t)
, я получаю кадр длины 10, каждый столбец отбирается 5 раз, а кадр данных возвращается NaN
в ячейках, у которых нет связанной выборки.Почему поведение этих двух функций отличается?Я ожидаю, что они будут одинаковыми?
Похоже, что df.sample(5)
эквивалентно
df.apply(lambda x: np.random.choice(x,5))
Так что теперь, если я сгруппирую фрейм данных.
g = df.groupby('A')
затем g.apply(lambda x: x.sample(2))
дает мне то, что я хочу (случайная выборка 2 из каждой группы), но применяя ту же эквивалентность, что и раньше
g.apply(lambda x: np.random.choice(x,2))
дает мне ValueError
,Почему это?