Python 筛选只有零值且有2列的行
样本DF: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
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
我想按按名称和价格分组,然后根据金额进行筛选,并将拟合测试作为条件列
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'))
?