按类别获取Python数据框中的随机样本

时间:2016-12-27 12:32:24

标签: python-3.x pandas

我有一个这样的样本列表:

Category| Item
--------|-------
Animal  | Fish
Animal  | Cat
...     |
Food    | Fish
Food    | Cake
...     |
etc...

我想从每个类别中随机抽取10个项目,以便剩下的数据框只有这些记录。

我已经尝试了df.sample(),但它只是给了我全面的样本。

我可以通过df.iterrows()来做到这一点,但我希望有一个更简单的解决方案。

2 个答案:

答案 0 :(得分:6)

您必须使用groupby方法告诉您要按类别分组的pandas。

df.groupby('category')['item'].apply(lambda s: s.sample(10))

如果样本中的项目少于10个,但不想使用替换样本,则可以执行此操作。

df.groupby('category')['item'].apply(lambda s: s.sample(min(len(s), 10)))

答案 1 :(得分:2)

我有一个imbalanced数据集,并且我使用以下代码balance对该数据集进行了重复activity,每个数据集的每个类(标签)都有100个样本(行)。oversampling是我的课。该代码用于少数类的undersampling实例或多数类的balanced_df=Pdf_train.groupby('activity',as_index = False,group_keys=False).apply(lambda s: s.sample(100,replace=True)) 实例。它只能用于训练集。

# This gives 0 result
key='A/B/test.csv'
bucket = s3.Bucket(bucket_name)
objs = list(bucket.objects.filter(Prefix=key))
print len(objs)