我有以下数据框:
name desc brand model
1: AAA desc_AAA brand_1 model_1
2: AAA desc_AAA brand_2 model_2
3: BBB desc_BBB brand_3 model_3
我要检查“名称”列中是否存在“废料”或“机械”。如下所示:
Name
0 [Scrap]
1 [Machinery, Scrap]
2 [RMG]
3 [Leather]
4 [Machinery]
5 [RMG, Optical Frame, Machinery]
我尝试了以下代码。
Name Type
0 [Scrap] True
1 [Machinery, Scrap] True
2 [RMG] False
3 [Leather] False
4 [Machinery] True
5 [RMG, Optical Frame, Machinery] True
但是,我得到以下结果:
df['Type'] = df.apply(lambda x: ["Scrap", "Iron","Machinery"] in x["Name"], axis=1)
答案 0 :(得分:1)
这是使用.apply
的一种方法。
例如:
to_check = ("Scrap", "Iron","Machinery")
df = pd.DataFrame({"Name": [["Scrap"], ["Machinery", "Scrap"], ["RMG"], ["Leather"], ["Machinery"], ["RMG", "Optical Frame", "Machinery"]]})
df['Type'] = df["Name"].apply(lambda x: any(i in x for i in to_check))
print(df)
输出:
Name Type
0 [Scrap] True
1 [Machinery, Scrap] True
2 [RMG] False
3 [Leather] False
4 [Machinery] True
5 [RMG, Optical Frame, Machinery] True
答案 1 :(得分:0)
您正在检查是否可以找到整个列表,这就是为什么您找不到True
的原因。试试
df['Type'] = df.apply(lambda elem: ("Scrap" in elem["Name"]) or ("Machinery" in elem["Name"]), axis=1)
答案 2 :(得分:0)
还可以使用set相交来查看是否存在公共元素。
df['Type'] = df.apply(lambda x: bool( set(["Scrap", "Iron","Machinery"]) & set(x["Name"]) ), axis=1)