我们假设我有一个像这样的DataFrame:
df = pd.DataFrame({'name':['John Doe', 'Jack Bauer???', 'Chris Smith'],
'flag':['True', 'False', 'True]})[['name', 'flag']]
正如您所看到的,第一个和第三个名称的格式正确,但第二个名称的文本不正确。我想要一个新的专栏(或名称'以及'名称'),如下所示:
'name':
'John Doe'
False
'Chris Smith'
在熊猫中获得这个理想结果的最佳方法是什么?我努力使用面具并申请让它发挥作用。
答案 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
字符串True
和False
为布尔值:
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