Drop rows on multiple conditions in pandas dataframe
Try to filter your df with loc. It's so powerful! The "~" means you want to keep those with the opposite of your condition. The ":" means you want to keep all the columns
df = df.loc[~((df['col_1'] == 1.0) & (df['col_2'] == 0.0)),:]
drop is a method, you are calling it using []
, that is why it gives you:
'method' object is not subscriptable
change to ()
(a normal method call) and it should work:
import pandas as pd
df = pd.DataFrame({"col_1": (0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0),
"col_2": (0.0, 0.24, 1.0, 0.0, 0.22, 3.11, 0.0),
"col_3": ("Mon", "Tue", "Thu", "Fri", "Mon", "Tue", "Thu")})
df_new = df.drop(df[(df['col_1'] == 1.0) & (df['col_2'] == 0.0)].index)
print(df_new)
Output
col_1 col_2 col_3
0 0.0 0.00 Mon
1 0.0 0.24 Tue
2 1.0 1.00 Thu
4 0.0 0.22 Mon
5 1.0 3.11 Tue
mask = df['Product_Code'].isin(['filter1', 'filter2', 'filter3'])
df = df[~mask]
df.head()
.isin()
allows you to filter the entire dataframe based on multiple values in a series. This is the least amount of code to write, compared to other solutions that I know of.
Adding the ~
inside the column wise filter reverses the logic of isin()
.
You can use or (|) operator for this , Refer this link for it pandas: multiple conditions while indexing data frame - unexpected behavior
i.e dropping rows where both conditions are met
df = df.loc[~((df['col_1']==1) | (df['col_2']==0))]