我有一个这样的数据框
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 参数设置为全局常量,它就可以正常运行。但当不同的值位于单独的数据框中时,我不知道如何设置它。
您可以从 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(lambda x:x.sample(n = mapper [x.name])).reset_index(drop = True)
Customer Day 0 A 1 1 A 1 2 B 3