У меня есть фрейм данных pandas (df) со многими предметами.
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 subject 20640 non-null object
1 block 20640 non-null int64
Скажем, я хочу подмножить df с первыми n уникальными субъектами (сохранив все строки для этих n предметов). Есть ли простая команда для этого?
Используйте boolean indexing
с фильтром первых уникальных значений с помощью Series.isin
:
n = 10
df1 = df[df['subject'].isin(df['subject'].unique()[:n])]
Или:
df1 = df[df['subject'].isin(df['subject'].drop_duplicates().head(n))]
Если нужны первые уникальные последовательные значения:
print (df)
subject
0 a
1 a
2 b
3 f
4 d
5 g
6 a <-should be removed
7 b <-should be removed
n= 3
s = df['subject'].ne(df['subject'].shift()).cumsum()
print (s)
0 1
1 1
2 2
3 3
4 4
5 5
6 6
7 7
Name: subject, dtype: int32
df1 = df[s.le(n)]
print (df1)
subject
0 a
1 a
2 b
3 f