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

Sim*_*rty 2 python-3.x pandas

我有一个这样的示例列表:

Category| Item
--------|-------
Animal  | Fish
Animal  | Cat
...     |
Food    | Fish
Food    | Cake
...     |
etc...
Run Code Online (Sandbox Code Playgroud)

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

我试过了,df.sample()但它只是给了我全面的样品.

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

Ted*_*rou 7

您必须告诉您要按类别按类别分组的熊猫groupby.

df.groupby('category')['item'].apply(lambda s: s.sample(10))
Run Code Online (Sandbox Code Playgroud)

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

df.groupby('category')['item'].apply(lambda s: s.sample(min(len(s), 10)))
Run Code Online (Sandbox Code Playgroud)


jav*_*vac 6

我有一个imbalanced数据集,我对数据集使用了以下代码,balance其中数据集的每个类(标签)有 100 个样本(行)以及重复项。activity是我的课。此代码用于oversampling少数类的实例或undersampling多数类的实例。它应该仅用于训练集。

balanced_df=Pdf_train.groupby('activity',as_index = False,group_keys=False).apply(lambda s: s.sample(100,replace=True))
Run Code Online (Sandbox Code Playgroud)