【问题标题】:Getting a random sample in Python dataframe by category按类别在 Python 数据框中获取随机样本
【发布时间】:2017-05-11 17:56:22
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    我有一个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))
    

    【讨论】:

      【解决方案2】:

      你必须告诉 pandas 你想用 groupby 方法按类别分组。

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

      如果您的样品少于十件,但不想更换样品,您可以这样做。

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

      【讨论】:

      • 我收到一个错误,因为并非所有类别都包含 10 个项目。所以我不得不改成s.sample(10, replace=True)。否则这行得通!谢谢。
      • 如果您不想更换样品,您可以只保留少于 10 个类别的所有项目。请参阅更新后的答案。
      • 应该是 s。固定
      猜你喜欢
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      相关资源
      最近更新 更多