【问题标题】:Python: sample from dataframe, storing the non-sampledPython:来自数据帧的样本,存储非采样
【发布时间】:2020-02-05 09:18:16
【问题描述】:
我有一个熊猫数据框。
假设我想对每组的两个人进行抽样,我使用以下代码来获取一个新的数据框:
sample_df = df.groupby("category").apply(lambda group_df: group_df.sample(2, random_state=1234)
我想创建一个存储非抽样人员的数据框。
sample_df 仍然具有原始 df 的索引,所以我可能需要对此做些什么,但我不确定是什么...
提前致谢!
【问题讨论】:
标签:
python
pandas
dataframe
sample
sampling
【解决方案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
因此可以通过Index.isin 过滤带有boolean indexing 的原始索引值和~ 的反转掩码:
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