sergzemsk
sergzemsk

Reputation: 172

Select columns with specific values in pandas DataFrame

I have some colums in my DataFrame with values 0 and 1

    name    a   b   c   d   e
0   one     1   0   1   0   0
1   two     0   0   1   0   0
2   three   0   0   1   0   1

How can I select columns where at least one value is 1? But another columns (that are strings or take not only 0 and 1 values) must be selected too.

I tried this expression

df.iloc[:, [(clm == 'name') | (1 in df[clm].unique()) for clm in df.columns]]

Out:
    name  a  c  e
0    one  1  1  0
1    two  0  1  0
2  three  0  1  1

But is seems not good because I explicitly choose column 'name'

Upvotes: 2

Views: 1549

Answers (1)

jezrael
jezrael

Reputation: 863451

If is possible remove all columns with only 0 values compare values by DataFrame.ne for not equal and return at least one True per columns in DataFrame.loc:

df = df.loc[:, df.ne(0).any()]
print (df)
    name  a  c  e
0    one  1  1  0
1    two  0  1  0
2  three  0  1  1

Details:

print (df.ne(0))
   name      a      b     c      d      e
0  True   True  False  True  False  False
1  True  False  False  True  False  False
2  True  False  False  True  False   True

print (df.ne(0).any())
name     True
a        True
b       False
c        True
d       False
e        True
dtype: bool

Upvotes: 3

Related Questions