我得到了一个如下表所示的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,如何先对“预测”列进行优先级设置,然后对“概率”列进行优先级设置?

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

最佳答案

可以通过将“预测”转换为有序的“分类”列,然后调用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

10-06 05:03
查看更多