每个客户的样本量不同
Sample with different sample sizes per customer
我有一个这样的数据框
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
这个returns多索引,可以随时reset_index,
df.groupby('Customer').apply(lambda x: x.sample(n = mapper[x.name])).reset_index(drop =正确)
Customer Day
0 A 1
1 A 1
2 B 3
我有一个这样的数据框
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
这个returns多索引,可以随时reset_index,
df.groupby('Customer').apply(lambda x: x.sample(n = mapper[x.name])).reset_index(drop =正确)
Customer Day
0 A 1
1 A 1
2 B 3