Python新手在这里,试图创建一个布尔掩码子集数据集。我将感谢任何指导,如何使这个面具的工作和我做错了什么。谢谢你,谢谢
我的df看起来像这样:
import pandas as pd
df= pd.DataFrame({'A': ['A-dog', "B-dog","C-cat" , "E-snake", "F-hamser"],
'B': ['F-dog', "B-parrot","C-snake" , "E-cat", "F-bird"],
'C': [1, 2, 3, 4, 5],
'D': [22,23,24,25,26],
'E': ['A-snake', "B-dog","C-snake" , "E-snake", "F-snake"],
'Flag': [0,0,0,0,0]})
df
我想评估列A,B和E,并将以“狗”和“猫”结尾的单元格替换为“”,并将我进行替换的行的“标志”列更改为1。
我想创建一个布尔掩码,这样我就可以替换字符串并将“Flag”更改为1,但我的掩码不起作用。
这就是我所尝试的:
cols=['A','B','E']
mask=df[cols].apply(lambda x: 'dog' or 'cat' in x[-3:])
# x[-3:] to select the last three characters of the string.
# If the mask were working, I would change the flag variable in this way
df.loc(mask.any(axis=1),'Flag')=1
我得到的df看起来像这样:
res= pd.DataFrame({'A': ['A-', "B-","C-" , "E-snake", "F-hamser"],
'B': ['F-', "B-parrot","C-snake" , "E-", "F-bird"],
'C': [1, 2, 3, 4, 5],
'D': [22,23,24,25,26],
'E': ['A-snake', "B-","C-snake" , "E-snake", "F-snake"],
'Flag': [1,1,1,1,0]})
res
2条答案
按热度按时间xoefb8l81#
验证码
使用str.endswith函数为Flag创建一个序列。
s
然后使用replace with regex & change Flag column
产出:
kmbjn2e32#
你可以用
.str.endswith
创建掩码(这个函数也接受值的元组):图纸: