2017-02-20 15 views
1

У меня есть рамка данных pandas. Я хочу извлечь определенное количество наблюдений из каждой подгруппы блока данных и поместить их в новый фрейм данных. Например, давайте предположим, что мы имеем следующую dataframe:Извлечение групповых наблюдений из pandas dataframe

  Var1 Var2 
    0  1  1.2 
    1  2  1.3 
    2  2  1.4 
    3  1  1.5 
    4  1  1.6 
    5  2  1.7 
    6  1  1.8 
    7  1  1.9 
    8  2  2.0 
    9  1  2.1 
    10  2  2.2 
    11  1  2.3 

Я хочу, чтобы отсортировать его var1 первым:

  Var1 Var2 
    0  1  1.2 
    1  1  1.5 
    2  1  1.6 
    3  1  1.8 
    4  1  1.9 
    5  1  2.1 
    6  1  2.3 
    7  2  1.3 
    8  2  1.4 
    9  2  1.7 
    10  2  2.0 
    11  2  2.2 

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

  Var1 Var2 
    0  1  1.2 
    1  1  1.5 
    2  2  1.3 
    3  2  1.4 

Я знаю, как использовать группу мимо, но это мне не понятно, как выполнить второй шаг. Огромное спасибо за помощь.

ответ

2

Использование sort_values с groupby и head:

df = df.sort_values('Var1').groupby('Var1').head(2).reset_index(drop=True) 
print (df) 
    Var1 Var2 
0  1 1.2 
1  1 1.5 
2  2 1.3 
3  2 1.4 

df = df.groupby('Var1').head(2).sort_values('Var1').reset_index(drop=True) 
print (df) 
    Var1 Var2 
0  1 1.2 
1  1 1.5 
2  2 1.3 
3  2 1.4 

Другое решение с iloc:

df = df.groupby('Var1')['Var2'] 
     .apply(lambda x: x.iloc[:2]) 
     .reset_index(level=1, drop=True) 
     .reset_index() 
print (df) 
    Var1 Var2 
0  1 1.2 
1  1 1.5 
2  2 1.3 
3  2 1.4 

Примечание:

Для более старой версии pandas измените sort_values на sort, а скорее на последнюю версию.

+0

Большое спасибо, он работает точно так, как должен. Просто примечание для более старых пользователей панд: используйте 'sort' вместо 'sort_values'. – user6566438