Извлечение групповых наблюдений из кадра данных панд
У меня есть пандас датафрейм. Я хочу извлечь определенное количество наблюдений из каждой подгруппы блока данных и поместить их в новый блок данных. Например, предположим, у нас есть следующий фрейм данных:
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
а затем сохраните первые два наблюдения каждой группы и поместите их в новый фрейм данных:
Var1 Var2
0 1 1.2
1 1 1.5
2 2 1.3
3 2 1.4
Я знаю, как использовать group by, но мне не ясно, как выполнить второй шаг. Огромное спасибо за помощь.
1 ответ
Решение
Использование 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
Замечания:
Для более старой версии изменения панд sort_values
в sort
, а точнее обновить до последней версии.