Можно хоть в numpy, хоть в pandas. Учи что такое булевая маска. И как с ее помощью выбирать подсеты массива.
array = np.array([
['петя', 'ваня', 'ира'],
["катя", 'саша', 'ира'],
['петя', 'миша', 'ира'],
['петя', 'миша','саша'],
])
cond1 = np.any((array == 'петя'), axis=1)
cond2 = np.any((array == 'ира'), axis=1)
comb = cond1 & cond2
array[~comb]
Сейчас перечитал вопрос и смотрю, в оглавлении вопроса ты одно спрашиваешь а в самом вопросе другое.
удалить строки в многомерном массиве, элементы которого содержат два и более разных значений
это означит
оставить строки только с одинаковыми значениями. изпользуй np.unique()
unique_per_row = np.array([len(np.unique(row)) for row in array])
array[unique_per_row == 1]