python - 根据 python 中选定列的总和创建新列

我有一个这样的数据框

ID  Q001    Q002    Q003    Q004    Q005    Q006    Q007    Q008    Win
A   1       1       1       1       1       1       1       1       Yes
B   0       1       0       1       0       1       0       1       No
C   0       1       0       1       0       1       0       1       No
D   1       1       0       1       1       1       1       1       Yes
E   1       1       0       1       1       1       1       1       Yes
F   1       1       0       1       1       1       1       1       Yes
G   0       0       1       0       0       0       0       0       No
H   0       0       0       0       0       0       0       0       No
I   1       0       1       0       1       0       1       0       No

在上面的数据框中,如果 Q001 和 Q002 的总和等于或大于 2,我想创建列“Win”并分配 values“是”,如果小于 2,则分配“否”。我该怎么做Python 中的这个?

回答1

使用 np.where() 以其他列为条件返回 value。

df['Win'] = np.where(df['Q001'] + df['Q002'] >= 2, 'Yes', 'No')

回答2

查看

df['Win'] = np.where(df[['Q001','Q002']].sum(1)>=2,'Yes','No')
df
Out[680]: 
  ID  Q001  Q002  Q003  Q004  Q005  Q006  Q007  Q008  Win
0  A     1     1     1     1     1     1     1     1  Yes
1  B     0     1     0     1     0     1     0     1   No
2  C     0     1     0     1     0     1     0     1   No
3  D     1     1     0     1     1     1     1     1  Yes
4  E     1     1     0     1     1     1     1     1  Yes
5  F     1     1     0     1     1     1     1     1  Yes
6  G     0     0     1     0     0     0     0     0   No
7  H     0     0     0     0     0     0     0     0   No
8  I     1     0     1     0     1     0     1     0   No

回答3

只需使用:

import numpy as np

cols = ['Q001', 'Q002']
df['Win'] = np.where(df[cols].sum(axis=1).ge(2),
                     'Yes', 'No')

您可以将其扩展到任意数量的列。

输出:

ID  Q001  Q002  Q003  Q004  Q005  Q006  Q007  Q008  Win
0  A     1     1     1     1     1     1     1     1  Yes
1  B     0     1     0     1     0     1     0     1   No
2  C     0     1     0     1     0     1     0     1   No
3  D     1     1     0     1     1     1     1     1  Yes
4  E     1     1     0     1     1     1     1     1  Yes
5  F     1     1     0     1     1     1     1     1  Yes
6  G     0     0     1     0     0     0     0     0   No
7  H     0     0     0     0     0     0     0     0   No
8  I     1     0     1     0     1     0     1     0   No

回答4

您可以将列计算为布尔系列并将 values 替换为 YesNo (如果必须):

df['Win'] = (df['Q001'] + df['Q002'] >= 2).replace({False: 'No', True: 'Yes'})

相似文章

python - Python - 在多行和多列中比较 values

我是Python的新手,我有一个如下所示的数据框(请参阅原始数据table)。最终目标是协调来自2个系统(sys1与sys2,在“源”列中标记)的记录(即id、rg、prd和数量)。我如何使用1个函数...

最新文章