pandas.DataFrame.where#

DataFrame.где(условие, other=nan, *, inplace=False, ось=None, уровень=None)[источник]#

Заменить значения, где условие ложно.

Параметры:
условиебулев Series/DataFrame, массивоподобный объект или вызываемый объект

Где условие равно True, сохранить исходное значение. Где False, заменить соответствующим значением из other. Если условие является вызываемым, он вычисляется на Series/DataFrame и должен возвращать булев Series/DataFrame или массив. Вызываемый объект не должен изменять входной Series/DataFrame (хотя pandas не проверяет это).

otherскаляр, Series/DataFrame или вызываемый объект

Записи, где условие равно False заменяются на соответствующее значение из other. Если other является вызываемым объектом, он вычисляется на Series/DataFrame и должен возвращать скаляр или Series/DataFrame. Вызываемый объект не должен изменять входные Series/DataFrame (хотя pandas не проверяет это). Если не указано, записи будут заполнены соответствующим NULL-значением (np.nan для типов данных numpy, pd.NA для расширенных типов данных).

inplacebool, по умолчанию False

Выполнять ли операцию на месте на данных.

осьint, по умолчанию None

Ось выравнивания при необходимости. Для Series этот параметр не используется и по умолчанию равен 0.

уровеньint, по умолчанию None

Уровень выравнивания при необходимости.

Возвращает:
Тот же тип, что у вызывающего объекта, или None, если inplace=True.

Смотрите также

DataFrame.mask()

Вернуть объект той же формы, что и self.

Примечания

Метод where является применением идиомы if-then. Для каждого элемента в вызывающем DataFrame, если cond является True используется элемент; в противном случае соответствующий элемент из DataFrame other используется. Если ось other не выравнивается с осью cond Series/DataFrame, неправильно выровненные позиции индекса будут заполнены значением False.

Сигнатура для DataFrame.where() отличается от numpy.where(). Приблизительно df1.where(m, df2) эквивалентно np.where(m, df1, df2).

Для получения дополнительных подробностей и примеров см. where документация в индексирование.

Тип данных объекта имеет приоритет. Заполняющее значение приводится к типу данных объекта, если это можно сделать без потерь.

Примеры

>>> s = pd.Series(range(5))
>>> s.where(s > 0)
0    NaN
1    1.0
2    2.0
3    3.0
4    4.0
dtype: float64
>>> s.mask(s > 0)
0    0.0
1    NaN
2    NaN
3    NaN
4    NaN
dtype: float64
>>> s = pd.Series(range(5))
>>> t = pd.Series([True, False])
>>> s.where(t, 99)
0     0
1    99
2    99
3    99
4    99
dtype: int64
>>> s.mask(t, 99)
0    99
1     1
2    99
3    99
4    99
dtype: int64
>>> s.where(s > 1, 10)
0    10
1    10
2    2
3    3
4    4
dtype: int64
>>> s.mask(s > 1, 10)
0     0
1     1
2    10
3    10
4    10
dtype: int64
>>> df = pd.DataFrame(np.arange(10).reshape(-1, 2), columns=['A', 'B'])
>>> df
   A  B
0  0  1
1  2  3
2  4  5
3  6  7
4  8  9
>>> m = df % 3 == 0
>>> df.where(m, -df)
   A  B
0  0 -1
1 -2  3
2 -4 -5
3  6 -7
4 -8  9
>>> df.where(m, -df) == np.where(m, df, -df)
      A     B
0  True  True
1  True  True
2  True  True
3  True  True
4  True  True
>>> df.where(m, -df) == df.mask(~m, -df)
      A     B
0  True  True
1  True  True
2  True  True
3  True  True
4  True  True