Python 当序列是布尔值时设置字符串?
我想在C列中设置一个字符串,而B列中的值为>=2(如果>=为真,则为是;如果>=为假,则为否)。输出应如下所示: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' 到目前为止,我已尝试实
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)