Образец с различными размерами выборки для каждого клиента - PullRequest
1 голос
/ 11 ноября 2019

У меня есть фрейм данных как таковой

    Customer   Day
0.    A         1
1.    A         1
2.    A         1
3.    A         2
4.    B         3
5.    B         4

, и я хочу сэмплировать его, но я хочу сэмплировать разные размеры для каждого клиента. У меня есть размер каждого клиента в другом кадре данных. Например,

    Customer   Day
0.    A         2
1.    B         1

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

def sampling(frame,a): 
    return np.random.choice(frame.Id,size=a) 

grouped = frame.groupby(['Customer','Day'])
sampled = grouped.apply(sampling, a=??).reset_index()

Если я установлю параметр размера в глобальную константу, он не будет запускаться. Но я не знаю, как установить это, когда разные значения находятся на отдельном кадре данных.

1 Ответ

0 голосов
/ 11 ноября 2019

Вы можете создать маппер из df1 с размером выборки и использовать это значение в качестве размера выборки,

mapper = df1.set_index('Customer')['Day'].to_dict()

df.groupby('Customer', as_index=False).apply(lambda x: x.sample(n = mapper[x.name]))


       Customer Day
0   3   A       2
    2   A       1
1   4   B       3

Это возвращает мультииндекс, вы всегда можете выполнить reset_index,

df. groupby («Клиент»). apply (лямбда-x: x.sample (n = mapper [x.name])). reset_index (drop = True)

    Customer    Day
0   A           1
1   A           1
2   B           3
...