Python: выборка из фрейма данных, в которой хранится выборка без выборки - PullRequest
2 голосов
/ 05 февраля 2020

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

sample_df = df.groupby("category").apply(lambda group_df: group_df.sample(2, random_state=1234)

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

Стил sample_df имеет индексы оригинала df, поэтому мне, вероятно, придется что-то с этим сделать, но я не уверен, что ...

Заранее спасибо!

1 Ответ

0 голосов
/ 05 февраля 2020

Сначала добавьте group_keys=False к groupby во избежание category к MultiIndex:

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'category':list('aaabbb')
})

sample_df = (df.groupby("category", group_keys=False)
               .apply(lambda group_df: group_df.sample(2, random_state=1234)))
print(sample_df)
   A  B category
0  a  4        a
1  b  5        a
3  d  5        b
4  e  5        b

Так что возможно отфильтровать исходные значения индекса с boolean indexing по Index.isin и перевернутая маска ~:

non_sample_df = df[~df.index.isin(sample_df.index)]
print(non_sample_df)
   A  B category
2  c  4        a
5  f  4        b
...