熊猫:当至少N个其他布尔列为True时,为新的布尔列

时间:2019-04-12 07:31:36

标签: python pandas

我有一个带有几个布尔列的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方法?

2 个答案:

答案 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个-True1之类的进程:

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