Pandas: новый логический столбец, когда по крайней мере N других логических столбцов имеют значение True

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных pandas с несколькими логическими столбцами. Я хочу создать новый столбец, который имеет значение True, когда по крайней мере N из этих столбцов имеют значение True. Например:

 Name | A | B | C | D
John Doe | False | True | False | True
Jane Smith | True | False | False | False
Alan Holmes | True | False | True | True
Eric Lamar | True | True | True | True
  

Для N=2 мы получим столбец со значениями: (True, False, True, True)

Есть ли какой-либо pythonic способ достижения этого?

Ответ №1:

Используйте:

 df['New'] = df.select_dtypes(bool).sum(axis=1).ge(N)
print (df)
          Name      A      B      C      D    New
0     John Doe  False   True  False   True   True
1   Jane Smith   True  False  False  False  False
2  Alan Holmes   True  False   True   True   True
3   Eric Lamar   True   True   True   True   True
  

Подробнее:

Сначала выберите только логические столбцы с помощью DataFrame.select_dtypes :

 print (df.select_dtypes(bool))
       A      B      C      D
0  False   True  False   True
1   True  False  False  False
2   True  False   True   True
3   True   True   True   True
  

Считать только True s по DataFrame.sum True s — это такие процессы, как 1 :

 print (df.select_dtypes(bool).sum(axis=1))
0    2
1    1
2    3
3    4
dtype: int64
  

Тест на Series.ge >= :

 print (df.select_dtypes(bool).sum(axis=1).ge(N))
0     True
1    False
2     True
3     True
dtype: bool
  

Ответ №2:

Использование pandas.DataFrame.sum(1) :

 N = 2
df['Trues'] = df.iloc[:, 1:].sum(1)>=N

         Name      A      B      C      D  Trues
0     JohnDoe  False   True  False   True   True
1   JaneSmith   True  False  False  False  False
2  AlanHolmes   True  False   True   True   True
3   EricLamar   True   True   True   True   True