【问题标题】:looping over grouped dataframe with multiple conditions循环遍历具有多个条件的分组数据帧
【发布时间】:2019-10-22 12:01:51
【问题描述】:

我得到了一个如下表所示的 csv 文件。对于每个文件夹,我希望返回最有可能成为“狗”的图像。每个文件夹只能返回一个图像。如果 Dog 不存在,则以最高概率将“Cat”作为主图像。如果没有猫,则将概率最高的鸟设为主图像,依此类推。

CSV:

FolderName     ImageName    Predictions    Probabilities
   ABC           MyPet           Dog            0.98
   ABC           HisPet          Cat            0.90
   DEF           HerPet          Bird           0.83
   ABC           NotPet          Dog            0.23
   DEF           asdf            Dog            0.78
   DEF           M123            Cat            0.19
   GHI           M123s           Cat            0.89
   GHI           M13             Cat            0.19

我只能返回概率最高的 img,我怎样才能先优先化 Prediction 列,然后是 Probabilities 列?

df.loc[df.groupby('FolderName')['Probabilities'].idxmax()]

代码返回

FolderName     ImageName    Predictions    Probabilities
   ABC           MyPet           Dog            0.98
   DEF           asdf            Bird           0.83
   GHI           M123s           Cat            0.89

想要的结果:

FolderName     ImageName    Predictions    Probabilities
   ABC           MyPet           Dog            0.98
   DEF           asdf            Dog            0.78
   GHI           M123s           Cat            0.89

【问题讨论】:

    标签: python pandas loops dataframe pandas-groupby


    【解决方案1】:

    这可以通过将“预测”转换为有序分类列,然后调用sort_valuesdrop_duplicates 来完成。

    df['Predictions'] = pd.Categorical(
        df['Predictions'], categories=['Dog', 'Cat', 'Bird'], ordered=True)
    
    (df.sort_values(['Predictions', 'Probabilities'], ascending=[True, False])
       .drop_duplicates('FolderName'))
    
      FolderName ImageName Predictions  Probabilities
    0        ABC     MyPet         Dog           0.98
    4        DEF      asdf         Dog           0.78
    6        GHI     M123s         Cat           0.89
    

    【讨论】:

    • @Mike 我可以断然确认如果您使用此代码不会发生这种情况。请检查您的数据,或使用违规行编辑您的帖子,以便我进行调试。如您所见,这适用于您的输入。请再次检查。
    • @cs95 谢谢 :-) 我最近关闭了一个基于该标签的较新问题,并且感觉该问题下的大多数答案仅涵盖主键重复删除..
    猜你喜欢
    • 2021-07-19
    • 2021-12-25
    • 2021-12-15
    • 2021-12-18
    • 1970-01-01
    • 2019-01-05
    • 2011-08-28
    • 1970-01-01
    相关资源
    最近更新 更多