Akshay Tarpara
Akshay Tarpara

Reputation: 143

Remove Rows in Dataframe with custom condition

df = pd.DataFrame({
'Number' : ['IN-60','IN-60','AMD-60','AMD-60','IN-60','AMD-60','AMD-62','AMD-62']
'Value':['0','10','51','50','20','0','0','0']

})

Input :-

Number   Value
IN-60     0       
IN-60     10      
AMD-60    51      
AMD-60    50      
IN-60     20      
AMD-60    0      
AMD-62    0       
AMD-62    0       

I want drops rows where Number are same and value is 0 and if 2 more same number entry with zero then i want one number in dataframe.
I want to Output like :

Output:-

Number   Value   
IN-60     10      
IN-60     20      
AMD-60    51      
AMD-60    50      
AMD-62    0           

Upvotes: 0

Views: 109

Answers (1)

not_speshal
not_speshal

Reputation: 23146

Try:

df = pd.DataFrame({'Number' : ['IN-60','IN-60','AMD-60','AMD-60','IN-60','AMD-60','AMD-62'],
                   'Value': ['0','10','51','50','20','0','0']
                   })

df = df[~((df["Number"].duplicated(keep=False))&(df["Value"]==0))]

>>>df
   Number  Value
1   IN-60     10
2  AMD-60     51
3  AMD-60     50
4   IN-60     20
6  AMD-62      0

Edit:

If your numbers are strings as in your example, try:

df = df[~((df["Number"].duplicated(keep=False))&(df["Value"]=='0'))]

Edit 2:

For rows that have 2 or more 0 values, you can append back one of them like so:

keep_rows = df.where(df[df["Value"]=="0"].duplicated()).dropna()
df = pd.concat([df[~((df["Number"].duplicated(keep=False))&(df["Value"]=='0'))], keep_rows])
>>> df
   Number Value
1   IN-60    10
2  AMD-60    51
3  AMD-60    50
4   IN-60    20
7  AMD-62     0

Upvotes: 1

Related Questions