#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