Как корректно проставить 1 в столбец flag для строк, где x > 0, избегая chained indexing и SettingWithCopyWarning?
A
df[df["x"] > 0]["flag"] = 1B
df.loc[df["x"] > 0, "flag"] = 1C
for i in range(len(df)): df.loc[i, "flag"] = int(df.loc[i, "x"] > 0)D
df["flag"] = 1; df = df[df["x"] > 0]Правильный ответ. Для безопасного присваивания по условию используйте
.loc[условие, столбец] = ....Разбор
Выражение вида df[условие]["col"] = ... создает промежуточный объект и может менять не исходный DataFrame, что приводит к SettingWithCopyWarning и потенциально к ошибкам в аналитике. Идиоматичный и надежный способ — df.loc[условие, "col"] = значение: в одном шаге выбираются нужные строки и столбец, и присваивание выполняется на оригинальном DataFrame.
Проверь себя · 1/3разбор после ответа
Что выберет фильтр
df[~df["status"].isin(["cancelled", "returned"])]?Ещё вопросы по теме «Pandas и DataFrame»
- Что вернёт выражение `df[df["price"] > 100]`?
- В `DataFrame` `df` есть столбцы `country`, `user_id`, `revenue`. Что вернёт выражение `df.loc[df["country"] == "RU", ["user_id", "revenue"]]`?
- В `df` есть столбец `age`. Какие значения `age` попадут в результат `df[(df["age"] >= 18) & (df["age"] <= 25)]`?
- Что выберет фильтр `df[~df["status"].isin(["cancelled", "returned"])]`?
- Что верно про два шага: `mask = df["col"] > 0` и затем `df[mask]`?
- Все вопросы по «Pandas и DataFrame» →