Пример pandas фрейм данных по значению столбца - PullRequest
2 голосов
/ 26 мая 2020

У меня есть pandas фрейм данных с именем ratings_full в форме:

userID   nr_votes
123      12
124      14
234      22
346      35
763      45
238      1
127      17

Я хочу взять образец этого фрейма данных, так как он содержит десятки тысяч пользователей. Я хочу извлечь 100 пользователей, но как-то расставить приоритеты для тех, у которых значение меньше nr_votes, без выборки только их. Так что своего рода «расслоенная выборка» на nr_votes. Является ли это возможным? 1007 1013 *

EDIT : Я был бы даже счастлив, если бы мы могли разделить nr_votes на N сегментов и выполнить стратифицированную выборку для этих сегментов.

РЕДАКТИРОВАТЬ 2 Я сейчас пытаюсь это сделать:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X=ratings_full.drop([nr_votes], axis=1),
             y=ratings_full.nr_votes, 
             test_size=0.33, 
             random_state=42, 
             stratify=y)

Затем мне нужно снова собрать фреймы данных. Это не идеальный ответ, но он может сработать. Я даже попробую сначала создать ведро и использовать столбец ведра в качестве своих "ярлыков".

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Мы можем сделать np.random.choice, выполнив индексный срез

n = len(ratings_top)
idx = np.random.choice(ratings_top.index.values, p=ratings_top['probability'], size=n*0.0007, replace=True)

Затем

sample_df = df.loc[idx].copy()
0 голосов
/ 26 мая 2020
from sklearn.model_selection import StratifiedShuffleSplit

n_splits = 1 
sss = model_selection.StratifiedShuffleSplit(n_splits=n_splits, 
                                                 test_size=0.1,
                                                 random_state=42)
train_idx, test_idx = list(sss.split(X, y))[0]
...