我有一个熊猫DataFrame。 假设我想对每个小组的两个人进行抽样,我使用以下代码来获取新的数据框:
sample_df = df.groupby("category").apply(lambda group_df: group_df.sample(2, random_state=1234)
我想创建一个存储未抽样人员的数据框。
sample_df
的Stil具有原始df
的索引,因此我可能必须对此进行处理,但是我不确定是什么...
谢谢!
答案 0 :(得分:1)
首先将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