1

The dataframe below has time series data

| datetime                | mc | quality | v0 | v1 | v2 | v5 | v6 | v7   | v8 | v9 | v10 |
|-------------------------|----|---------|----|----|----|----|----|------|----|----|-----|
| 2021-12-27 14:00:56.420 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5515 | 0  | 0  | 0   |
| 2021-12-27 14:01:25.267 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5507 | 0  | 0  | 0   |
| 2021-12-27 14:01:54.113 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5524 | 0  | 0  | 0   |
| 2021-12-27 14:02:22.897 | L2 | 192     | 1  | 5  | 6  | 1  | 0  | 5513 | 0  | 0  | 0   |
| 2021-12-27 14:02:51.747 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5455 | 0  | 0  | 0   |
| 2021-12-27 14:03:51.743 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5522 | 7  | 3  | 9   |
| 2021-12-27 14:04:51.743 | L2 | 192     | 1  | 4  | 0  | 0  | 0  | 5522 | 7  | 3  | 9   |

Requirement: I need to select rows in which either v1 or v9 is not equal '0'

| datetime                | mc | quality | v0 | v1 | v2 | v5 | v6 | v7   | v8 | v9 | v10 |
|-------------------------|----|---------|----|----|----|----|----|------|----|----|-----|
| 2021-12-27 14:02:22.897 | L2 | 192     | 1  | 5  | 6  | 1  | 0  | 5513 | 0  | 0  | 0   |
| 2021-12-27 14:03:51.743 | L2 | 192     | 1  | 0  | 0  | 0  | 0  | 5522 | 7  | 3  | 9   |
| 2021-12-27 14:04:51.743 | L2 | 192     | 1  | 4  | 0  | 0  | 0  | 5522 | 7  | 3  | 9   |

Trials:

df = df[df.v1 != 0]

If I select individually it works

df = df[(df.v1 != 0) & (df.v9 != 0)]

But if I put condition it doesn't work, I get empty data frame.

Would like to know the efficient method

1 Answer 1

1

Use | for bitwise OR:

df1 = df[(df.v1 != 0) | (df.v9 != 0)]
print (df1)
                 datetime  mc  quality  v0  v1  v2  v5  v6    v7  v8  v9  v10
3 2021-12-27 14:02:22.897  L2      192   1   5   6   1   0  5513   0   0    0
5 2021-12-27 14:03:51.743  L2      192   1   0   0   0   0  5522   7   3    9
6 2021-12-27 14:04:51.743  L2      192   1   4   0   0   0  5522   7   3    9

Or test both columns with DataFrame.any for get rows if at least one True in boolean DataFrame:

df1 = df[(df[['v1','v9']] != 0).any(axis=1)]
print (df1)
                 datetime  mc  quality  v0  v1  v2  v5  v6    v7  v8  v9  v10
3 2021-12-27 14:02:22.897  L2      192   1   5   6   1   0  5513   0   0    0
5 2021-12-27 14:03:51.743  L2      192   1   0   0   0   0  5522   7   3    9
6 2021-12-27 14:04:51.743  L2      192   1   4   0   0   0  5522   7   3    9
Sign up to request clarification or add additional context in comments.

3 Comments

I have one question. Suppose if the data frame is of large volume, is it better have condition using '|' or 2d one
@user_v27 - first. Second is better if need test e.g. 100 columns,
oh! ok. Thank you!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.