2016-06-07 68 views
2

比方說,我有這樣一個數據幀:熊貓保持列值,如果真別的假

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

正如你所看到的第一和第三名的格式是否正確,但第二個名稱有壞文本。我希望有一個新的列(或就地在「名稱」),看起來像:

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

什麼,就是以大熊貓這一期望的結果的最佳方式?我正在努力使用口罩並申請使其工作。

回答

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 

如果replaceTrueFalse布爾:

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 
+0

感謝您詳細的和靈活的答案! – unpairestgood

+0

很高興能幫到你! – jezrael