Прежде всего давайте создадим фрейм данных и список из вашего примера:
import pandas as pd
df = pd.DataFrame(
[
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 0],
[1, 1, 1, 0, 1],
],
index=["abc", "def", "ghi", "jkl", "mnl"],
columns=list("abcde")
).applymap(bool)
my_list = ['a', 'b', 'c']
Затем давайте разделим проблему на две части
Часть 1: Создать new_col
В основном вам нужно взять все столбцы из my_list
и выполнить операцию and
построчно. Вы можете сделать это с помощью all(axis=1)
:
df["new_col"] = df[my_list].all(axis=1)
Результат будет:
a b c d e new_col
abc False False False False False False
def False False False False True False
ghi False False False True False False
jkl False False False False False False
mnl True True True False True True
Часть 2. Обновление таблицы на основе new_col
Это можно сделать с помощью оператора loc
. Мы хотим повлиять на все строки, где new_col
равно True
и установить False
для столбцов в my_list
:
df.loc[df["new_col"], my_list] = False
Результат будет:
a b c d e new_col
abc False False False False False False
def False False False False True False
ghi False False False True False False
jkl False False False False False False
mnl False False False False True True