Reputation: 143
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
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
If your numbers are strings as in your example, try:
df = df[~((df["Number"].duplicated(keep=False))&(df["Value"]=='0'))]
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