如果您有x * n矩阵,如何检查包含一定数字的行,如果是,如何删除该行?
答案 0 :(得分:2)
如果您使用的是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]]