Python: sample from dataframe,存储非采样

Python: sample from dataframe, storing the non-sampled

我有一个 pandas DataFrame。 假设我想对每组中的两个人进行抽样,我使用以下代码获取新的数据框:

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

我想创建一个存储非抽样人员的数据框。

sample_df stil 具有原始 df 的索引,所以我可能必须对此做一些事情,但我不确定是什么...

提前致谢!

首先将group_keys=False添加到groupby以避免categoryMultiIndex:

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 by 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