我有一个这样的样本列表:
Category| Item
--------|-------
Animal | Fish
Animal | Cat
... |
Food | Fish
Food | Cake
... |
etc...
我想从每个类别中随机抽取10个项目,以便剩下的数据框只有这些记录。
我已经尝试了df.sample()
,但它只是给了我全面的样本。
我可以通过df.iterrows()
来做到这一点,但我希望有一个更简单的解决方案。
答案 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)