Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pandas: print all non-empty rows from a DataFrame

I have this data:

time-stamp              ccount  A   B   C   D   E   F   G   H   I
2015-03-03T23:43:33+0000    0   0   0   0   0   0   0   0   0   0
2015-03-04T06:33:28+0000    0   0   0   0   0   0   0   0   0   0
2015-03-04T06:18:38+0000    0   0   0   0   0   0   0   0   0   0
2015-03-04T05:36:43+0000    0   0   0   1   0   0   0   0   0   0
2015-03-04T05:29:09+0000    0   0   0   1   0   0   0   0   1   0
2015-03-04T07:01:11+0000    0   0   1   0   1   0   0   0   0   0
2015-03-03T15:27:06+0000    19  0   1   0   1   0   0   0   0   0
2015-03-03T15:43:38+0000    10  0   1   0   1   1   0   0   0   0
2015-03-03T18:16:26+0000    0   0   0   1   0   0   0   0   0   0
2015-03-03T18:19:48+0000    0   0   0   0   0   0   0   0   0   0
2015-03-03T18:20:02+0000    4   0   0   0   0   1   0   0   0   0
2015-03-03T20:21:55+0000    2   0   0   0   0   0   1   0   0   0
2015-03-03T20:37:36+0000    0   0   0   0   0   0   0   0   0   0
2015-03-04T03:03:51+0000    1   0   0   0   0   0   1   0   0   0
2015-03-03T16:33:04+0000    9   0   0   0   0   0   0   0   0   0
2015-03-03T16:18:13+0000    1   0   0   0   0   0   0   0   0   0
2015-03-03T16:34:18+0000    4   0   0   0   0   0   0   0   0   0
2015-03-03T18:11:36+0000    5   0   0   0   0   0   0   0   0   0
2015-03-03T18:24:35+0000    0   0   0   0   0   0   0   0   0   0

I want to slice all rows which have at least a single one ("1") in the columns A to I.

For the above data, the output will be:

time-stamp              ccount  A   B   C   D   E   F   G   H   I
2015-03-04T05:36:43+0000    0   0   0   1   0   0   0   0   0   0
2015-03-04T05:29:09+0000    0   0   0   1   0   0   0   0   1   0
2015-03-04T07:01:11+0000    0   0   1   0   1   0   0   0   0   0
2015-03-03T15:27:06+0000    19  0   1   0   1   0   0   0   0   0
2015-03-03T15:43:38+0000    10  0   1   0   1   1   0   0   0   0
2015-03-03T18:16:26+0000    0   0   0   1   0   0   0   0   0   0
2015-03-03T18:20:02+0000    4   0   0   0   0   1   0   0   0   0
2015-03-03T20:21:55+0000    2   0   0   0   0   0   1   0   0   0
2015-03-04T03:03:51+0000    1   0   0   0   0   0   1   0   0   0

We have ignored all the rows which don't have a "1" in any of the columns from A to I.


1 Answers

You could use any and boolean indexing to select only the rows that have at least one entry equal to 1:

df[(df.loc[:,['A','B','C','D','E','F','G','H','I']] == 1).any(axis=1)]

Referring to columns by label is somewhat tedious if you have a lot of them so you can use slicing to make things a little neater:

df[(df.loc[:, 'A':'I'] == 1).any(axis=1)]
like image 67
Alex Riley Avatar answered Oct 27 '25 03:10

Alex Riley