python - 每个客户提供不同样本大小的样本
问题描述
我有一个这样的数据框
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('Customer').apply(lambda x: x.sample(n = mapper[x.name])).reset_index(drop = True)
Customer Day
0 A 1
1 A 1
2 B 3
推荐阅读
- html - 在 twig/volt 中包含 .css 文件
- reactjs - 从 reactjs 中的按钮中的另一个页面调用函数
- rust - 如果将结构移动到不同的位置,Rust 中是否有任何特征会收到通知?
- java - Json数据数组请求不断跳过onResponse
- c# - 隐藏字段未将部分视图中的值存储到复杂对象数组中
- powershell - 如何在执行 .exe 文件期间处理弹出窗口
- bigcartel - Bigcartel:是否有可能使含税价格出现?
- ios - “在我的 iPhone 上”选项在模拟器中不可见。
- android - Android如何混淆静态字符串常量?
- c# - C# ASP System.IO.Compression - 对多个文件使用 zipArchive.CreateEntryFromFile 时出现未经授权的访问异常()