Примерный фрейм данных с заранее заданным числом записей в час - PullRequest
0 голосов
/ 29 октября 2019

Мне нужно сэмплировать кадр данных (df1), и у меня есть еще один кадр данных (df2), который сообщает мне, сколько записей я должен извлечь из каждого часа дня.

Например, df1:

   Hour number
0.  00    A
1.  00    B
2.  00    C
3.  01    D
4.  01    A
5.  01    B
6.  01    D

df2:

   Hour number
0.  00    1
1.  01    2

Чтобы в итоге я получил, например, запись № 1 для полуночи и записи 3 и 5 для 1 часа ночи (или любую другую комбинацию, еслион учитывает число в df2)

Дело в том, что мне нужно написать это в функции, чтобы я мог вызывать ее внутри другой функции.

Пока у меня есть

def sampling(frame):
     return np.random.choice(frame.index)

но я не могу добавить ограничения df2.

Может ли кто-нибудь помочь?

1 Ответ

0 голосов
/ 29 октября 2019

Сначала мы добавляем количество образцов, необходимое в качестве нового столбца, используя merge и применяем sample к каждой группе значений Hour. Наконец, мы удаляем добавленный столбец, возвращая все, кроме последнего столбца:

def sampling(df1, df2):
    return df1.merge(df2, on='Hour').groupby('Hour').apply(lambda x: x.sample(x.Number[0])).reset_index(0,True).iloc[:,:-1]

df1 = pd.DataFrame({'Hour': [0,0,0,1,1,1,1], 'Value': list('ABCDABD')})
df2 = pd.DataFrame({'Hour': [0,1], 'Number': [1,2]})
sampling(df1, df2)

Результат:

   Hour Value
2     0     C
4     1     A
5     1     B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...