设置字符串,而系列是一个布尔值?

时间:2017-06-05 16:14:06

标签: 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' 

到目前为止,我已经尝试实现嵌套循环,这太慢了:

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'

4 个答案:

答案 0 :(得分:2)

像这样的东西

df['C'] = 'no'
df['C'][df['B'] >= 2] = 'yes'

答案 1 :(得分:1)

这可以通过在B列上使用“apply”以及lambda函数和三元“if”来完成:

import pandas as pd
df = pd.DataFrame.from_dict({'A': ['A', 'B', 'C'], 'B': [1, 2, 3]})
df['C'] = df['B'].apply(lambda r: "yes" if r >= 2 else "no")
应用于DataFrame列的

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

答案 2 :(得分:1)

您可以使用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

答案 3 :(得分:1)

这也可以通过创建布尔值列C' C'根据你的条件:

pytest=2.9.0

但如果你只想要'是'和'不'然后,您可以将布尔值列转换为字符串并应用替换函数。

df['C'] = df['B'] >= 2