如何从 python 中每个值的样本大小不同的数据框中过滤掉随机样本?

How do I filter out random sample from dataframe in which there are different sample size for each value, in python?

我必须从以下数据中过滤掉随机样本:

'a'应该有6个值,

'b' 应该有 4 个值和

'c' 应该有 7 个随机值。

Data    Value

a       1
a       2
a       3
a       4
a       5
a       6
a       7
a       8
a       9
a       10
b       1
b       2
b       3
b       4
b       5
b       6
b       7
b       8
b       9
c       1
c       2
c       3
c       4
c       5
c       6
c       7
c       8

我希望输出为:

Data Value

a     3
a     5
a     7    
a     2
a     4
a     9
b     3
b     5
b     7
b     8
c     1
c     3    
c     4    
c     5
c     6
c     7
c     9

首先定义每个组的样本计数,然后 groupbysample:

d = {'a':6, 'b':4, 'c':7}

df = df.groupby('Data', group_keys=False).apply(lambda x: x.sample(d[x.name]))
print (df)
   Data  Value
7     a      8
5     a      6
0     a      1
2     a      3
9     a     10
8     a      9
17    b      8
18    b      9
15    b      6
14    b      5
22    c      4
23    c      5
25    c      7
21    c      3
20    c      2
24    c      6
19    c      1

另一种仅过滤字典键匹配值的方法:

d = {'a':6, 'b':4, 'c':7}

df = pd.concat([df[df['Data'].eq(k)].sample(v) for k, v in d.items()], ignore_index=True)