Правильный синтаксис where()
Подскажите правильный синтаксис. Нужно по условию внутри функции where() заполнить новый столбец new.
df['new'] = df.where(df['first'] > df['second'], 'Первый')
Ошибка
ValueError: Expected a 1D array, got an array with shape (23699, 26)
Ответы (1 шт):
Синтаксис pandas DataFrame.where предполагает замену существующих значений по условию. При этом замена происходит только, если условие НЕ выполняется. Это значит, что при выполнении метода where возвращаются только измененные значения, а те, которые не попали под условие - не возвращаются. Из-за этого размерность возвращаемого фрейма или серии не совпадает с начальной размерностью.
В вашем случае для решения задачи сначала надо задать новую колонку, чтобы ее размерность соответствовала исходной, а потом заполнять:
import pandas as pd
import numpy as np
df = pd.DataFrame({"a":[1,0,0,1]})
df:
a
0 1
1 0
2 0
3 1
теперь:
df["new"]=pd.NA
df["new"] = df["new"].where(df["a"]!=0, "bar")
df:
a new
0 1 <NA>
1 0 bar
2 0 bar
3 1 <NA>
При использовании же numpy where можно обойтись без инициализации колонки заранее:
import numpy as np
df["new"] = np.where(df["a"]!=0, np.nan, "bar")
df:
a new
0 1 nan
1 0 bar
2 0 bar
3 1 nan