Drop rows on multiple conditions in pandas dataframe

后端 未结 5 745
猫巷女王i
猫巷女王i 2020-12-05 11:37

My df has 3 columns

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)         


        
相关标签:
5条回答
  • 2020-12-05 12:13
    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().

    0 讨论(0)
  • 2020-12-05 12:16

    Try to filter your df with loc. It's so powerfull. The "~" means you want the opposit 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)),:]
    
    0 讨论(0)
  • 2020-12-05 12:30

    Put the location of row which you want remove at "location".

    df = df.drop(['location' axix=1, inplace=True]
    
    0 讨论(0)
  • 2020-12-05 12:31

    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) an 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
    
    0 讨论(0)
  • 2020-12-05 12:38

    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))]
    
    0 讨论(0)
提交回复
热议问题