Pandas - 对不同比例的多个组进行抽样

Pandas - sample many groups with different proportions

我需要对每个组使用不同的比例按组对数据帧进行采样。我有 100 多个组,但为了简单起见,我的示例只有 3 个组。 假设我有这个数据框:

df2 = pd.DataFrame({'group_id': np.repeat(['A', 'B', 'C'], (40, 60, 20)),
               'vals': np.random.randn(120)})
N = len(df2)
df2.groupby('group_id').count()

#           vals
#group_id   
#A         40
#B         60
#C         20

我想使用下面的数据框对 A、B 和 C 组进行抽样:

 prop = pd.DataFrame({'A': {0.45},
                      'B': {0.55},
                      'C': {0.62}})

当我尝试采样时,出现错误:

grouped = df2.groupby('group_id')
x = grouped.apply(lambda x: x.sample(frac=props))

错误:NameError:全局名称 'props' 未定义

非常感谢任何帮助! 谢谢

我认为需要标量的 DataFrame 然后通过 x.name:

查找
prop = pd.DataFrame({'A': [0.45],
                      'B': [0.55],
                      'C': [0.62]})

grouped = df2.groupby('group_id')
x = grouped.apply(lambda x: x.sample(frac=prop[x.name]))
print (x.head(20))
            group_id      vals
group_id                      
A        19        A  1.157552
         37        A  0.086347
         0         A -0.668129
         8         A -0.345811
         27        A -0.301085
         14        A -0.325130
         6         A  0.301966
         15        A  1.944702
         4         A  1.350509
         1         A -0.498210
         2         A  0.618576
         31        A -0.274381
         16        A  1.915676
         25        A  0.136372
         32        A  0.864837
         9         A -0.315231
         20        A -0.106208
         34        A  1.324797
B        85        B -0.861647
         55        B -0.079275