每个客户的样本数量不同的样本

问题描述 投票:1回答:1

我有这样的数据框

    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()

如果我将size参数设置为全局常数,则它不会运行。但是,当不同的值位于单独的数据帧上时,我不知道如何设置。

我有一个这样的数据框,例如Customer Day0。A1 1. A 1 2. A 1 3. A 2 4. B 3 5. B 4,我想从中取样,但我想...] >

python python-3.x pandas sampling
1个回答
0
投票

您可以使用样本大小从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
© www.soinside.com 2019 - 2024. All rights reserved.