微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 如何以不同的速率从pandas数据帧中对每个组进行采样

我有一个数据框,其中包含有关我希望从中生成样本的人口的信息.我还有一个dataframe sample_info,它详细说明了我的样本中我需要的人口数据帧中每组的单位数.我已经开发了一些代码来实现我所需要的但是它比我想要的大数据集运行得慢.

有没有办法对人口框架进行分组并对群组进行采样,而不是像我在下面所做的那样循环遍历?

import pandas as pd

population = pd.DataFrame([[1,True],[1,False],[1,False],[2,True],[2,True],[2,False],[2, True]], columns = ['Group ID','Response'])

    Group ID    Response
0   1           True
1   1           False
2   1           False
3   2           True
4   2           True
5   2           False
6   2           True

sample_info = pd.DataFrame([[1,5],[2,6]], columns = ['Group ID','Sample Size'])

output = pd.DataFrame(columns = ['Group ID','Response'])

    Group ID    Sample Size
0   1           5
1   2           6


for index, row in sample_info.iterrows():    
        output = output.append(population.loc[population['Group ID'] == row['Group ID']].sample(n=row['Sample Size'], replace = True)) 

我无法想出使用group-by引入样本大小信息并按照Pandas: sample each group after groupby中的建议应用

解决方法:

将sample_info转换为字典.按组ID分组人口.使用字典将示例大小值传递给DataFrame.sample.

mapper = sample_info.set_index('Group ID')['Sample Size'].to_dict()

population.groupby('Group ID').apply(lambda x: x.sample(n=mapper.get(x.name))).reset_index(drop = True)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐