Как отфильтровать случайную выборку из фрейма данных, в котором для каждого значения есть разные размеры выборки в python? - PullRequest
0 голосов
/ 31 августа 2018

Я должен отфильтровать случайную выборку из данных, по которым:

'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

1 Ответ

0 голосов
/ 31 августа 2018

Сначала определите количество образцов для каждой группы, а затем groupby с помощью sample:

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)
...