Удаление строк с несколькими условиями в столбцах

#python #pandas

#python #pandas

Вопрос:

Я хочу отбрасывать строки при многих условиях. Ниже приведен код, но это занимает много времени.

 a=[]
for i in range(len(df)):
    if df['col_1'][i] in ['a','b'] and (pd.isna(df['col_2'][i])==True or df['col_2'][i]=='c'):
        a.append(i)

df.drop(a, inplace=True)
df.reset_index(inplace=True,drop=True)
  

Ответ №1:

Используйте boolean indexing с invert условиями — здесь isin для ~ , | для amp; , amp; для | , isna для notna и == для != :

 df = pd.DataFrame({
         'col_1':list('abgaeb'),
         'col_2':[np.nan,'c','d','c','f',np.nan],

})

m = (~df['col_1'].isin(['a','b'])) | df['col_2'].notna() amp; (df['col_2'] !='c')

df = df[m]
print (df)
  col_1 col_2
2     g     d
4     e     f
  

Ответ №2:

Попробуйте это:

df = df.loc[~(df['col_1'].isin(['a','b']) amp; ((pd.isna(df['col_2'])==True) | (df['col_2']=='c')))]