Удалить строку с определенным значением в столбце - PullRequest
0 голосов
/ 14 мая 2019

Я хочу удалить все строки, в которых определенные столбцы имеют значение 1

Например, рассмотрим следующий список:

x=[[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,0,1,0],[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,0,1,0]]

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

x=[[0,1,0,0],[0,0,0,1],[0,1,0,0],[0,0,0,1]]

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Список:

In [33]: x=[[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,0,1,0],[1,0,0,0],[0,1,0,0],[0,0,0,1
    ...: ],[0,0,1,0]]                                                           

эквивалент массива:

In [34]: arr = np.array(x)                                                      
In [35]: arr                                                                    
Out[35]: 
array([[1, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 0, 1],
       [0, 0, 1, 0],
       [1, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 0, 1],
       [0, 0, 1, 0]])

тестирование столбцов:

In [36]: arr[:,[0,2]]                                                           
Out[36]: 
array([[1, 0],
       [0, 0],
       [0, 0],
       [0, 1],
       [1, 0],
       [0, 0],
       [0, 0],
       [0, 1]])

маска, идентифицирующая строки, которые имеют 1 в любом из этих столбцов:

In [37]: arr[:,[0,2]].any(axis=1)                                               
Out[37]: array([ True, False, False,  True,  True, False, False,  True])

применить эту маску для удаления строк; эквивалентно, чтобы сохранить другие строки:

In [38]: arr[~_, :]                                                             
Out[38]: 
array([[0, 1, 0, 0],
       [0, 0, 0, 1],
       [0, 1, 0, 0],
       [0, 0, 0, 1]])

arr не изменяется; это новый массив.

Общая идея состоит в том, чтобы создать маску или логический массив, который идентифицирует элементы, которые вы хотите сохранить, и использовать их для создания нового массива.

Использование понимания списка в исходном списке:

In [45]: [row for row in x if not any(row[j] for j in [0,2])]                   
Out[45]: [[0, 1, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 0, 1]]
0 голосов
/ 14 мая 2019
x=[[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,0,1,0],[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,0,1,0]]

y = [l for l in x if l[0] != 1 and l[2] != 1]
print(y)

выход

[[0, 1, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 0, 1]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...