在python中,如何从每个值都有不同样本大小的数据帧中过滤出随机样本?

在python中,如何从每个值都有不同样本大小的数据帧中过滤出随机样本?,python,pandas,random,sample,Python,Pandas,Random,Sample,我必须从以下数据中筛选出随机样本: “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

我必须从以下数据中筛选出随机样本:

“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

首先定义每组的样本计数,然后使用
sample
定义
groupby

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
另一种仅过滤dict键匹配值的方法:

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)