多条件分组数据帧循环

2024-09-28 19:21:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到一个csv文件,看起来像下表。对于每个文件夹,我希望返回的图像与最高的可能性是一个'狗'。每个文件夹只能返回一个图像。如果狗不在场,则将概率最大的“猫”作为主图像。如果没有猫,则将概率最大的鸟作为主图像,以此类推。你知道吗

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

Tags: 图像文件夹def概率catabcdogasdf
1条回答
网友
1楼 · 发布于 2024-09-28 19:21:15

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

相关问题 更多 >