2016-11-15 3 views
2

В приведенной ниже таблице данных я группируюсь по трем полям: «Тема», «Rep» и «yval».Пример n строк из каждой группы в pandas

import pandas as pd 
yval = [[1]*30 + [2]*20 + [1]*20 + [2]*30 ] 
yval = reduce(lambda x,y: x+y, yval) 
df = pd.DataFrame({'yval': yval , 'xval':np.random.randn(100)}) 
df['Subject'] = ['S01'] * 50 + ['S02'] * 50 
l = [[x] * 10 for x in range(3)] + [[x] * 10 for x in range(2)] + [[x] * 10 for x in range(2)] + [[x] * 10 for x in range(3)] 
l = reduce(lambda x,y: x+y,l) 
df['Rep'] = l 
df 


for k, t in df.groupby(['Subject', 'yval', 'Rep']): 
    print k 


('S01', 1, 0) 
('S01', 1, 1) 
('S01', 1, 2) 
('S01', 2, 0) 
('S01', 2, 1) 
('S02', 1, 0) 
('S02', 1, 1) 
('S02', 2, 0) 
('S02', 2, 1) 
('S02', 2, 2) 

Я пытаюсь найти способ, чтобы выбрать n строки из группы в каждой. В этом примере, предполагая n = 2, мы можем получить следующий результат. Если n=4, я ожидаю всего (весь фреймворк).

('S01', 1, 0) 
('S01', 1, 2) 
('S01', 2, 0) 
('S01', 2, 1) 
('S02', 1, 0) 
('S02', 1, 1) 
('S02', 2, 1) 
('S02', 2, 2) 

enter image description here

+0

Я не уверен, что правильно понял вопрос. Что значит «выбрать все данные, относящиеся к двум случайно выбранным группам»? Из приведенного ниже результата я не могу представить, что вы хотите удалить две группы? –

+0

На рисунке выше я заинтересован в выборе строк 'n' из каждой группы, окрашенных в разные цвета. «Выбрать все данные» означает извлечение коррелирующих данных из фактического кадра данных. – learner

ответ

1

Если я правильно понимаю, вот так, как вы могли бы сделать это:

import random 

# Do the groupby 
gps = df.groupby(['Subject', 'yval', 'Rep']) 

два варианта, один быстрее, но требует больше строк.

# Option 1: sample (20.6 µs per loop) 
group_list = random.sample(gps.groups.keys(), len(gps.groups)-2) 

# Option 2: shuffle (15.1 µs per loop) 
# Store the dict keys into a list 
group_list = list(gps.groups.keys()) 
random.shuffle(group_list) 
# Get all but the last two 
group_list = group_list[:-2] 
+0

thaks. Я редактировал свой OP. – learner

Смежные вопросы