Python 当序列是布尔值时设置字符串?

Python 当序列是布尔值时设置字符串?,python,pandas,for-loop,while-loop,list-comprehension,Python,Pandas,For Loop,While Loop,List Comprehension,我想在C列中设置一个字符串,而B列中的值为>=2(如果>=为真,则为是;如果>=为假,则为否)。输出应如下所示: A B C 1 A 2 'yes' 2 B 3 'yes' 3 C 4 'yes' 4 D 5 'yes' 5 A 6 'yes' 6 B 7 'yes' 7 C 0 'no' 8 D 1 'no' 9 A 2 'yes' 10 B 3 'yes' 11 C 4 'yes' 12 D 0 'no' 到目前为止,我已尝试实

我想在C列中设置一个字符串,而B列中的值为>=2(如果>=为真,则为是;如果>=为假,则为否)。输出应如下所示:

    A B   C 
1   A 2 'yes'
2   B 3 'yes'
3   C 4 'yes'
4   D 5 'yes'
5   A 6 'yes'
6   B 7 'yes'
7   C 0 'no'
8   D 1 'no'
9   A 2 'yes'
10  B 3 'yes' 
11  C 4 'yes' 
12  D 0 'no' 
到目前为止,我已尝试实现嵌套循环,但速度太慢:

i= 0
for row in range(0, len(df)-1):
    if df['B'][i] >= 2:
        if df['B'][i] >= 2:
            df['C'][i] = 'yes'
        elif df['B'][i] >= 2:
            df['C'][i] = 'yes'
像这样的

df['C'] = 'no'
df['C'][df['B'] >= 2] = 'yes'
这可以通过在B列上使用“应用”以及lambda函数和三元“if”来实现:

应用于数据帧列的“应用”将允许您对数据帧中的每个值应用函数。因此,我们测试每个值是否>=2,如果是,则返回“是”,否则返回“否”。

您可以使用np.where

df['C'] = np.where(df.B>=2, 'yes', 'no')

    A   B   C
1   A   2   yes
2   B   3   yes
3   C   4   yes
4   D   5   yes
5   A   6   yes
6   B   7   yes
7   C   0   no
8   D   1   no
9   A   2   yes
10  B   3   yes
11  C   4   yes
12  D   0   no

这也可以通过根据您的条件创建布尔值列“C”来实现:

df['C'] = df['B'] >= 2
但如果您只需要'Yes'和'No'值,则可以将布尔值列转换为字符串并应用replace函数

df['C'] = df['C'].astype(str)
df['C'].replace('False','No', inplace=True)
df['C'].replace('True','Yes', inplace=True)

您的问题和for循环说明了两件不同的事情。您在问题中没有提到您正在检查的行后面的行也必须大于或等于2。您是对的-我道歉。这是以前的一次尝试,因此我编辑了必要的更改。
df['C'] = df['C'].astype(str)
df['C'].replace('False','No', inplace=True)
df['C'].replace('True','Yes', inplace=True)