我有一个带有几个布尔列的pandas数据框。我想创建一个新列,当其中至少N个列为True时为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)
有没有实现此目标的Python方法?
答案 0 :(得分: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
仅按DataFrame.sum
计数True
个-True
是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
答案 1 :(得分:1)
使用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