如果为True,则Pandas保留列值,否则为False

时间:2016-06-07 12:51:54

标签: python pandas dataframe

我们假设我有一个像这样的DataFrame:

df = pd.DataFrame({'name':['John Doe', 'Jack Bauer???', 'Chris Smith'],
        'flag':['True', 'False', 'True]})[['name', 'flag']]

正如您所看到的,第一个和第三个名称的格式正确,但第二个名称的文本不正确。我想要一个新的专栏(或名称'以及'名称'),如下所示:

'name':
'John Doe'
False
'Chris Smith'

在熊猫中获得这个理想结果的最佳方法是什么?我努力使用面具并申请让它发挥作用。

1 个答案:

答案 0 :(得分:2)

我认为你需要mask

df = pd.DataFrame({'name':['John Doe', 'Jack Bauer???', 'Chris Smith'],
        'flag':['True', 'False', 'True']})[['name', 'flag']]

print (df)
            name   flag
0       John Doe   True
1  Jack Bauer???  False
2    Chris Smith   True

df['new'] = df.name.mask(df.flag=='False', False)
print (df)
            name   flag          new
0       John Doe   True     John Doe
1  Jack Bauer???  False        False
2    Chris Smith   True  Chris Smith

如果需要替换列name

df['name'] = df.name.mask(df.flag=='False', False)
          name   flag
0     John Doe   True
1        False  False
2  Chris Smith   True

如果replace字符串TrueFalse为布尔值:

df['flag'] = df.flag.replace({'True': True, 'False': False})

df['new'] = df.name.mask(~df.flag, False)
print (df)
            name   flag          new
0       John Doe   True     John Doe
1  Jack Bauer???  False        False
2    Chris Smith   True  Chris Smith

替换name

df['flag'] = df.flag.replace({'True': True, 'False': False})
df['name'] = df.name.mask(~df.flag, False)
print (df)
          name   flag
0     John Doe   True
1        False  False
2  Chris Smith   True

loc的另一个解决方案:

df.loc[df.flag=='True', 'new'] = df.name
print (df)
            name   flag          new
0       John Doe   True     John Doe
1  Jack Bauer???  False          NaN
2    Chris Smith   True  Chris Smith

替换name

df.loc[df.flag=='False', 'name'] = False
print (df)
          name   flag
0     John Doe   True
1        False  False
2  Chris Smith   True