Выберите строки, которые имеют только нули в столбцах - PullRequest
0 голосов
/ 29 мая 2018

Я хочу выбрать строки в кадре данных, которые имеют ноль в каждом столбце в списке столбцов.например, это df :.

In: 
    df = pd.DataFrame([[1,2,3,6], [2,4,6,8], [0,0,3,4],[1,0,3,4],[0,0,0,0]],columns =['a','b','c','d'])
    df

Out:
    a   b   c   d
0   1   2   3   6
1   2   4   6   8
2   0   0   3   4
3   1   0   3   4
4   0   0   0   0

Тогда:

In:
    mylist = ['a','b']
    selection = df.loc[df['mylist']==0]
    selection

Я хотел бы видеть:

Out:      
    a   b   c   d
2   0   0   3   4
4   0   0   0   0

Должно быть просто, но у меня медленный день!

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Использование reduce и Numpy's logical_and
Смысл этого состоит в том, чтобы исключить необходимость создания новых объектов Pandas и просто создать маску, которую мы ищем, используя данные, где они находятся.

from functools import reduce

df[reduce(np.logical_and, (df[c].values == 0 for c in mylist))]

   a  b  c  d
2  0  0  3  4
4  0  0  0  0
0 голосов
/ 29 мая 2018

Вам нужно будет определить, имеют ли все столбцы строки нули или нет.Учитывая логическую маску, используйте DataFrame.all(axis=1), чтобы сделать это.

df[df[mylist].eq(0).all(1)]

   a  b  c  d
2  0  0  3  4
4  0  0  0  0

Обратите внимание, что если вы хотите найти строки с нулями в каждом столбце, удалите шаг поднабора:

df[df.eq(0).all(1)]

   a  b  c  d
4  0  0  0  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...