Use loc
to filter with eq
and any
along axis 1, and logical NOT operator ~
:
df.loc[~df[['Q1', 'Q2', 'Q3']].eq(0).any(1)]
Example
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,5), columns=['Q1', 'Q2', 'Q3', 'Q4', 'Q5'])
df.loc[1,'Q1'] = 0
df.loc[4, 'Q2'] = 0
df.loc[3, 'Q5'] = 0
[out]
Q1 Q2 Q3 Q4 Q5
0 1.764052 0.400157 0.978738 2.240893 1.867558
1 0.000000 0.950088 -0.151357 -0.103219 0.410599
2 0.144044 1.454274 0.761038 0.121675 0.443863
3 0.333674 1.494079 -0.205158 0.313068 0.000000
4 -2.552990 0.000000 0.864436 -0.742165 2.269755
# Should drop rows 1 and 4, but leave row 3
df.loc[~df[['Q1', 'Q2', 'Q3']].eq(0).any(1)]
[out]
Q1 Q2 Q3 Q4 Q5
0 1.764052 0.400157 0.978738 2.240893 1.867558
2 0.144044 1.454274 0.761038 0.121675 0.443863
3 0.333674 1.494079 -0.205158 0.313068 0.000000