Как сэмплировать pandas фрейм данных, выбирая X строк из группы 1, но Y строк из группы 2 - PullRequest
1 голос
/ 14 января 2020

Представьте себе фрейм данных учеников / классов, такой что

dataframe with students and grades

Используя pandas, как я могу создать несколько групп, так что в каждой группе будет 1 ученик с A, 2 учениками с Bs и 1 учеником с C?

Я пытался использовать pandas 'GroupBy [' Grade '] и затем пробовать из каждой классной группы. Проблема в том, что он дает мне одинаковое количество учеников из каждой начальной группы, однако я хотел бы указать c количество учеников из каждой указанной c начальной группы.

Решение не должно заботиться о «остатках». Если бы у меня был полностью сформированный набор, который следует за необходимым распределением, я был бы счастлив.

Спасибо за любую помощь,

1 Ответ

2 голосов
/ 14 января 2020

Вы можете сделать это, используя словарь для хранения количества выборок из каждой группы, как показано ниже:

import pandas as pd
import numpy as np

# create the dataframe
df = pd.DataFrame(zip(['Person'+ str(i+1) for i in range(30)],
                 np.random.choice(['A','B', 'C'], 30, replace=True)),
             columns = ['Student','Grade'])

# use a dict to store the sample frequencies
sample_freq = {'A':1, 'B':2, 'C':3}

# group by desired variable
groups = df.groupby('Grade')

# sample from each group and concatenate them to a single data frame
pd.concat(
    [group_df.sample(sample_freq[group]) for group,group_df in groups])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...