Python - Удалить строку в матрице / массиве, если строка содержит - PullRequest
0 голосов
/ 10 декабря 2018

Если у вас есть матрица x * n, как вы проверяете строку, содержащую определенное число, и если да, то как вы удаляете эту строку?

1 Ответ

0 голосов
/ 10 декабря 2018

Если вы используете pandas, вы можете создать маску, которую можно использовать для индексации кадра данных, отрицая маску с помощью ~:

df = pd.DataFrame(np.arange(12).reshape(3, 4))
#    0  1   2   3
# 0  0  1   2   3
# 1  4  5   6   7
# 2  8  9  10  11

value = 2

Если вы хотите проверить, является ли значениесодержится в определенном столбце:

df[~(df[2] == value)]
#    0  1   2   3
# 1  4  5   6   7
# 2  8  9  10  11

Или, если он может содержаться в любом столбце:

df[~(df == value).any(axis=1)]
#    0  1   2   3
# 1  4  5   6   7
# 2  8  9  10  11

Просто переназначьте его на df впоследствии.


Это также работает, если вы используете просто numpy:

x = np.arange(12).reshape(3, 4)
# array([[ 0,  1,  2,  3],
#        [ 4,  5,  6,  7],
#        [ 8,  9, 10, 11]])

x[~(x == value).any(axis=1)]
# array([[ 4,  5,  6,  7],
#        [ 8,  9, 10, 11]])

И, наконец, если вы используете простой Python и у вас есть список списков, используйте встроенный any в понимании списка:

y = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

[row for row in y if not any(x == value for x in row)]
# [[4, 5, 6, 7], [8, 9, 10, 11]]
...