Как с помощью numpy или pandas удалить строки из многомерного массива, если они содержат два или более разных значений?

Привет! <br/> Я уже знаю, как удалить строки из многомерного массива, если в них содержится определенное значение. <br/> Можешь подсказать, как это сделать с помощью библиотек numpy или pandas? <br/> <br/> У меня есть массив: <br/> array = [ <br/> [петя, ваня, ира] <br/> [катя, саша, ира] <br/> [петя, миша, ира] <br/> [петя, миша, саша] <br/> ] <br/> <br/> Как мне удалить строки 0 и 2, в которых находятся и "петя", и "ира"?
  • 28 января 2025 г. 19:24
Ответы на вопрос 2
Для решения вашей задачи вы можете использовать библиотеку `pandas` или `numpy`. Здесь приведены примеры для обоих подходов.

### Решение с использованием pandas

```python
import pandas as pd

# Создаем DataFrame
data = [
    ['петя', 'ваня', 'ира'],
    ['катя', 'саша', 'ира'],
    ['петя', 'миша', 'ира'],
    ['петя', 'миша', 'саша']
]

df = pd.DataFrame(data)

# Удаляем строки, содержащие как 'петя', так и 'ира'
filtered_df = df[~(df.isin(['петя', 'ира']).all(axis=1))]

print(filtered_df)
```

### Решение с использованием numpy

Если вы предпочитаете использовать `numpy`, вот пример кода, который решает вашу задачу:

```python
import numpy as np

# Создаем массив
array = np.array([
    ['петя', 'ваня', 'ира'],
    ['катя', 'саша', 'ира'],
    ['петя', 'миша', 'ира'],
    ['петя', 'миша', 'саша']
])

# Удаляем строки, содержащие как 'петя', так и 'ира'
mask = np.array([not (('петя' in row) and ('ира' in row)) for row in array])
filtered_array = array[mask]

print(filtered_array)
```

### Объяснение кода

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

Таким образом, в обоих примерах в результате будут удалены строки, содержащие оба значения.
Можно  хоть в numpy, хоть в pandas. Учи что такое булевая маска. И как с ее помощью выбирать подсеты массива. 
array = np.array([
['петя', 'ваня', 'ира'],
["катя", 'саша', 'ира'],
['петя', 'миша', 'ира'],
['петя', 'миша','саша'],
])

cond1 = np.any((array == 'петя'), axis=1)
cond2 = np.any((array == 'ира'), axis=1)
comb = cond1 & cond2
array[~comb]
Похожие вопросы