Python 筛选只有零值且有2列的行

Python 筛选只有零值且有2列的行,python,pandas,Python,Pandas,样本DF: ID Name Price Amount Fit_Test 1 Apple 10 15 Super_Fit 2 Apple 10 0 Super_Fit 3 Apple 10 0 Super_Fit 4 Orange 12 20 Not_Fit 5 O

样本DF:

ID   Name        Price     Amount      Fit_Test
1    Apple         10      15        Super_Fit
2    Apple         10      0          Super_Fit
3    Apple         10      0          Super_Fit
4    Orange        12      20          Not_Fit
5    Orange        12      0          Not_Fit
6    Banana        15      17          Medium_Fit
7    Banana        15      0         Medium_Fit
8    Pineapple     25      19          Medium_Fit
9    Pineapple     25      18          Medium_Fit
10   Cherry        30      56         Super_Fit
11   XXX           50      0          Medium_Fit
12   XXX           50      0          Medium_Fit
    ID   Name        Price     Amount           Fit_Test
1    Apple         10           15              Super_Fit
2    Apple         10           0               Super_Fit
3    Apple         10           0               Super_Fit
4    Orange        12           20              Not_Fit

6    Banana        15           17              Medium_Fit

8    Pineapple     25           19              Medium_Fit
9    Pineapple     25           18              Medium_Fit
10   Cherry        30           56              Super_Fit
11   XXX           50            0          Medium_Fit
12   XXX           50             0          Medium_Fit
预期DF:

ID   Name        Price     Amount      Fit_Test
1    Apple         10      15        Super_Fit
2    Apple         10      0          Super_Fit
3    Apple         10      0          Super_Fit
4    Orange        12      20          Not_Fit
5    Orange        12      0          Not_Fit
6    Banana        15      17          Medium_Fit
7    Banana        15      0         Medium_Fit
8    Pineapple     25      19          Medium_Fit
9    Pineapple     25      18          Medium_Fit
10   Cherry        30      56         Super_Fit
11   XXX           50      0          Medium_Fit
12   XXX           50      0          Medium_Fit
    ID   Name        Price     Amount           Fit_Test
1    Apple         10           15              Super_Fit
2    Apple         10           0               Super_Fit
3    Apple         10           0               Super_Fit
4    Orange        12           20              Not_Fit

6    Banana        15           17              Medium_Fit

8    Pineapple     25           19              Medium_Fit
9    Pineapple     25           18              Medium_Fit
10   Cherry        30           56              Super_Fit
11   XXX           50            0          Medium_Fit
12   XXX           50             0          Medium_Fit
问题陈述:

ID   Name        Price     Amount      Fit_Test
1    Apple         10      15        Super_Fit
2    Apple         10      0          Super_Fit
3    Apple         10      0          Super_Fit
4    Orange        12      20          Not_Fit
5    Orange        12      0          Not_Fit
6    Banana        15      17          Medium_Fit
7    Banana        15      0         Medium_Fit
8    Pineapple     25      19          Medium_Fit
9    Pineapple     25      18          Medium_Fit
10   Cherry        30      56         Super_Fit
11   XXX           50      0          Medium_Fit
12   XXX           50      0          Medium_Fit
    ID   Name        Price     Amount           Fit_Test
1    Apple         10           15              Super_Fit
2    Apple         10           0               Super_Fit
3    Apple         10           0               Super_Fit
4    Orange        12           20              Not_Fit

6    Banana        15           17              Medium_Fit

8    Pineapple     25           19              Medium_Fit
9    Pineapple     25           18              Medium_Fit
10   Cherry        30           56              Super_Fit
11   XXX           50            0          Medium_Fit
12   XXX           50             0          Medium_Fit
我想按按名称和价格分组,然后根据金额进行筛选,并将拟合测试作为条件列

  • 如果Fit\u Test是
    Super\u Fit
    ,则不需要任何操作(第1、2、3和10行的输入和预期DF相同)

  • 如果在
    名称
    价格
    条件内,且拟合测试不是
    超级拟合
    ,则检查其是否有
    金额
    0
    ,然后仅删除该行(删除ID 4、5、6、7和预期的5和7)

  • 如果在
    名称
    价格
    条件和配合测试中没有
    超级配合
    如果合同金额的值大于零,则删除任何行(第8行和第9行在输入和预期DF中相同)

  • 如果在
    名称
    价格
    条件与配合测试中没有
    超级配合
    如果合同金额的所有值都等于零,则删除任何行(第11行和第12行在输入和预期DF中相同)


  • 我可以做一个解决方案,它删除所有零,但对条件列没有帮助。您可以链接2个条件-比较
    Fit_Test
    ,并检查每个组的所有
    True
    s是否在第二次比较时不相等:

    m1 = df['Fit_Test'].eq('Super_Fit').groupby([df['Name'],df['Price']]).transform('all')
    m2 = df['Amount'].ne(0)
    
    df = df[m1 | m2]
    print (df)
       ID       Name  Price  Amount    Fit_Test
    0   1      Apple     10      15   Super_Fit
    1   2      Apple     10       0   Super_Fit
    2   3      Apple     10       0   Super_Fit
    3   4     Orange     12      20     Not_Fit
    5   6     Banana     15      17  Medium_Fit
    7   8  Pineapple     25      19  Medium_Fit
    8   9  Pineapple     25      18  Medium_Fit
    9  10     Cherry     30      56   Super_Fit
    

    我认为它不起作用,因为当我输入
    类型(df['Amount'][0])
    时,它是以
    str
    的形式出现的。我是否应该将其更改为浮动/数值以工作?@RahulAgarwal-如果将
    m2=df['Amount'].ne(0)
    更改为
    m2=df['Amount'].ne('0')
    ,或者在
    m2
    中使用
    df['Amount']=pd.to_numeric(df['Amount'])
    ,而不是不等于零,我必须比较并看到一个群体中最大的价值…它将如何变化?@RahulAgarwal-你认为
    m2=df['Amount'].eq(df.groupby(['Name','Price'])['Amount'].transform('max'))