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

标签 python pandas sampling

我有一个数据框,其中包含我希望从中生成样本的人口信息。我还有一个数据框 sample_info,它详细说明了我的示例中需要的 population 数据框中每个组的单位数。我已经开发了一些代码来实现我所需要的,但考虑到我正在使用的大型数据集,它的运行速度比我希望的要慢。

有没有一种方法可以对人口框架进行分组并将抽样应用于各组,而不是像我在下面所做的那样循环遍历它们?

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)

关于python - 如何以不同的速率从 pandas 数据框中对每个组进行采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55523917/

相关文章:

python - 后验高斯过程(Python)

python - Haarcascades 在 OpenCV 中不起作用

python - 在 python 中使用 SQLAlchemy 将行迭代地插入到 postgreSQL 数据库中

python - 将 Tkinter 滚动条跳转到某个小部件

Python pyautogui Windows 10 控制转移结束组合失败

r - 在 R 中使用 MCMC Metropolis-Hastings 算法对多维度后验分布进行采样

python - 如何在 Pandas 的字符串末尾添加特定数量的字符?

python - Pandas:仅对一列中的选定值求和

python - pandas:groupby 使用作用于多个列之一的通用键函数

postgresql - 对 postgreSQL 中特定列值的计数进行采样