我有一个数据框df:
tags
"a,b,c,d"
"c,q,k,t"
和我需要搜索的字符串列表:
searchList = ["a", "b"]
我需要在我的数据框中添加一个名为“主题”的新列。如果来自searchList的字符串出现在“标签”列中,则需要将该行的值设置为bool True,否则设置为bool False。
最终结果:
tags | topic
"a,b,c,d" | True
"c,q,k,t" | False
到目前为止,我的代码:
searchList = ["a", "b"]
pattern = '|'.join(searchfor)
df["topic"] = df.loc[(df["tags"].str.contains('|'.join(pattern), na=False)), True] = True
但是我得到了错误:
KeyError: 'cannot use a single bool to index into setitem'
?
您可以将掩码分配给新列,也可以将pattern
更改为searchList
:
searchList = ["a", "b"]
df["topic"] = df["tags"].str.contains('|'.join(searchList), na=False)
print (df)
tags topic
0 a,b,c,d True
1 c,q,k,t False
编辑:
searchList = ["a", "b"]
df["topic"] = df["tags"].str.split(',', expand=True).isin(searchList).sum(axis=1).eq(2)
print (df)
tags topic
0 a,b,c,d True
1 c,q,k,t False
2 a,c,d False
详细信息:
首先将Series.str.split
与Series.str.split
一起用于新的expand=True
:
DataFrame
然后按print (df["tags"].str.split(',', expand=True))
0 1 2 3
0 a b c d
1 c q k t
2 a c d None
比较成员身份:
DataFrame.isin
并用DataFrame.isin
计算print (df["tags"].str.split(',', expand=True).isin(searchList))
0 1 2 3
0 True True False False
1 False False False False
2 True False False False
的值:
True
最后一次按sum
进行比较,print (df["tags"].str.split(',', expand=True).isin(searchList).sum(axis=1))
0 2
1 0
2 1
dtype: int64
作为掩码。