• Автор записи:
  • Рубрика записи:Pandas
  • Время чтения:4 минут чтения
  • Комментарии к записи:0 комментариев

Чтобы создавать или изменять условия столбцов, мы можем использовать функцию np.where() в Pandas Python. np.where() принимает условие в качестве аргумента и соответственно возвращает результат. Кроме того, мы можем фильтровать строки с некоторыми условиями и обрабатывать недостающие данные или значения NaN в кадре данных Python Pandas.

np.where в Python можно рассматривать как векторизованную форму троичного числа x, если условие, иначе y. В качестве аргументов он принимает условие и два параметра: если условие выполнено, выводится первый вариант, в противном случае он возвращает второе.

Давайте посмотрим базовый пример использования функции np.where() в Python.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
indices = np.where(arr > 3)
print(indices)

Вывод:

(array([3, 4], dtype=int64),)

np.where в Python

Содержание

Синтаксис

Основной синтаксис np.where в Python:

np.where(condition, [x, y])

Параметр

Здесь основные параметры, необходимые для функции NumPywhere():

Имя Описание
condition Структура, подобная массиву, где каждый элемент проверяется на соответствие условию. Он возвращает массив в Python с элементами из x или y, в зависимости от того, истинно или ложно условие.
x (Необязательно) Массив или скалярное значение, возвращаемое, если условие истинно.
y (Необязательно) Массив или скалярное значение, возвращаемое, если условие имеет значение False.

Возвращаемое значение

Если указаны и x, и y, мы получим массив Python NumPy. Он содержит элементы x, где условие истинно, и элементы из y в противном случае. Если задано только условие, numpy.where возвращает индексы элементов, которые имеют значение True.

Pandas построен на основе NumPy в Python, а это означает, что мы часто можем использовать функции NumPy непосредственно в сериях Pandas и DataFrames. Эта совместимость распространяется на np.where в Pandas Python, что позволяет выполнять плавные условные операции внутри DataFrame.

Давайте рассмотрим некоторые варианты использования np.where в Pandas Python.

Случай 1: с условным созданием или изменением столбца

Мы можем использовать np.where для создания нового столбца в DataFrame Pandas в Python на основе условия или для изменения существующего.

Пример: предположим, что у нас есть df Pandas DataFrame с возрастом столбца в Python. Мы хотим создать новый столбец age_group, который помечает каждого человека как «взрослый» или «ребенок» в зависимости от его возраста с помощью np.where() в Python.

import pandas as pd
import numpy as np

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 12, 32]})
df['age_group'] = np.where(df['age'] < 18, 'child', 'adult')
print(df)

Вывод:

      name  age age_group
0    Alice   25     adult
1      Bob   12     child
2  Charlie   32     adult

Случай 1: с условным созданием или изменением столбца

Случай 2: в нескольких столбцах

Реальная мощь np.where в Pandas проявляется, когда мы применяем его к нескольким столбцам кадра данных в Python.

Пример. Рассмотрим DataFrame в Python Pandas с данными, включая столбцы «Доход» и «Затраты». Мы хотим добавить новый столбец «Прибыльность», в котором указывается «Да», если «Доход» превышает «Затраты», и «Нет» в противном случае.

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'Product': ['Widget A', 'Widget B', 'Widget C'],
    'Revenue': [1500, 800, 1200],
    'Cost': [1000, 700, 500]
})

df['Profitable'] = np.where(df['Revenue'] > df['Cost'], 'Yes', 'No')
print(df)

Вывод:

    Product  Revenue  Cost Profitable
0  Widget A     1500  1000        Yes
1  Widget B      800   700        Yes
2  Widget C     1200   500        Yes

Случай 2: в нескольких столбцах 

Случай 3: для фильтрации строк

Хотя Pandas уже имеет мощные возможности запросов, np.where в Pandas Python можно использовать для индексации и фильтрации строк в определенных сценариях.

Пример. Допустим, у нас есть DataFrame Pandas в Python, содержащий информацию, и мы хотим отфильтровать строки с помощью функции numpy.where().

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'age': [25, 17, 32, 15, 22]
})

indices = np.where(df['age'] >= 18)[0]
adults_df = df.iloc[indices]
print(adults_df)

Вывод:

      name  age
0    Alice   25
2  Charlie   32
4      Eva   22

Случай 3: для фильтрации строк

Случай 4: для обработки недостающих данных

np.where в Pandas Python также является полезным инструментом для работы с отсутствующими значениями или значениями NaN путем условной замены их определенным значением.

Пример: здесь мы используем np.where() в Pandas Python для условной замены отсутствующих значений в DataFrame.

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [np.nan, 1, 2]})
print("Before the Dataframe was:\n", df)
df['A'] = np.where(df['A'].isna(), 0, df['A'])
print("After the Operation, Dataframe is:\n", df)

Вывод:

Before the Dataframe was:
      A    B
0  1.0  NaN
1  2.0  1.0
2  NaN  2.0
After the Operation, Dataframe is:
      A    B
0  1.0  NaN
1  2.0  1.0
2  0.0  2.0

Случай 4: для обработки недостающих данных

Случай 5: с несколькими условиями

Мы также можем использовать np.where в Pandas Python для оценки нескольких условий. Для этой цели мы часто используем логические операторы типа &(и), |(или) и ~(нет) из Python.

Пример: скажем, у нас есть фрейм данных Python Pandas, и мы хотим пометить наши данные некоторыми значениями, основанными на других столбцах. Для этого мы можем использовать np.where() в Pandas Python.

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'Product': ['Widget A', 'Widget B', 'Widget C'],
    'Revenue': [1500, 800, 1200],
    'Cost': [1000, 700, 500]
})

condition_high_profit =(df['Revenue'] > 1000) &(df['Cost'] < 500)
condition_low_profit =(df['Revenue'] <= 1000) &(df['Cost']  1000) &(df['Cost'] >= 500)

df['Profit_Category'] = np.where(
    condition_high_profit, 'High Profit',
    np.where(
        condition_low_profit, 'Low Profit',
        np.where(
            condition_high_loss, 'High Loss', 'Low Loss'
        )
    )
)
print(df)

Вывод:

    Product  Revenue  Cost Profit_Category
0  Widget A     1500  1000       High Loss
1  Widget B      800   700        Low Loss
2  Widget C     1200   500       High Loss

Случай 5: с несколькими условиями

Добавить комментарий