在下面的示例中,我能够将包含文本数据的pandas列与多个字符串集合相匹配。输出只会告诉我df.col1
单元格的任何部分是否包含集合中的某个元素。它不会告诉我是哪一个!我很想得到确切的结果(字符串与它在集合数组中的位置相匹配或者更好)
words = ['dog', 'monkey']
pat = "|".join(map(re.escape, words))
df = pd.DataFrame({'col1':['lion bites dog','dog bites monkey','monkey bites man','man bites apple']})
df.loc[df.col1.str.contains(pat),'col1']
我之所以需要知道集合中哪个字符串(上面的单词)是匹配的,是因为集合的每个元素都可以映射到一个数值。像
^{pr2}$我也许可以尝试df.map(dict)
,但在实际情况中,集合存储在pandas dataframe
中
words_df = pd.DataFrame({1:['dog'], 2:['monkey']})
我可以想出一个相当迂回的解决方案,迭代检查集合中的每个元素,但是如果集合中的元素数量很大,那么这种方法似乎效率很低。在
编辑//
所需输出可以是:
[0,0,1,NaN] or ['dog','dog','monkey',False]
概念1
使用集合
概念2
^{pr2}$使用
str.get_dummies
将其拉伸以获得所需的结果
概念3
使用
numpy
相关问题 更多 >
编程相关推荐