pandas 相对于组大小的样本

pandas sample relative to group size

我想从数据库中按组对行进行采样。但是每个样本的大小必须与每组中的行数成正比。

它涉及在不同国家和不同年份实施的项目清单(这些是我的小组)。我想从列表中抽样项目,与每个组中的项目总数成比例。

下面的table显示了已实施项目的数量和比例。

因此,例如我想从 2016 年在布基纳法索实施的 10 个项目中抽取 2 个项目。

我正在尝试使用 .sample() 函数和 .groupby() 函数,但我不知道如何同时使用这两个函数?

如果df1是来自图片的DataFrame并且df是原始DataFrame使用DataFrame.join:

df = df.join(df1['Percent of Project'], 
             on=['Initial Financial Year','Area of Intervention'])

然后使用GroupBy.apply with lambda function and DataFrame.sample:

f = lambda x: x.sample(x['Percent of Project'].iat[0])
df = (df.groupby(['Initial Financial Year','Area of Intervention'], group_keys=False)
        .apply(f))