在python中,如何从每个值都有不同样本大小的数据帧中过滤出随机样本?
我必须从以下数据中筛选出随机样本: “a”应该有6个值 “b”应具有4个值和 “c”应随机具有7个值在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
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)