我有一个包含两列的数据帧
当前数据帧
SE# Response COVID Words Mentioned
123456 As a merchant I appreciated your efforts in pricing with Covid-19
456789 you guys suck and didn't handle our relationship during this pandemic
347896 I love your company 所需的数据帧
SE# Response COVID Words Mentioned
123456 As a merchant I appreciated your efforts in pricing with Covid-19 Y
456789 you guys suck and didn't handle our relationship during this pandemic Y
347896 I love your company N术语=‘病毒’,‘新冠肺炎’,'covid19',‘流感’,'COVID','Corona','corona',‘新冠肺炎’,‘COVID19’,'Corona病毒‘,’Corona病毒‘,'covid',’普雷尔‘,’流行病‘,’Corona‘,’Corona‘
这些是需要在每个响应中检查的字符串列表。目标是能够在术语列表中添加或删除元素。
以上只是记录的例子。我有一个与新冠肺炎相关的字符串列表,需要在每个响应中进行搜索。如果存在任何字符串,请在“提到的COVID单词”列中,标记"Y“和"N”,如果这些单词没有出现。
我该如何用python编写代码呢?
非常感谢!
发布于 2020-09-10 04:18:02
对于每个搜索词,设置一个结果向量:
d = {}
for i in LIST_OF_STRINGS:
d[i] = df['response'].str.contains(i, na=False)我传递na=False,因为否则,Pandas将在字符串列本身为NA的情况下填充NA。我们不想要这种行为。随着搜索项数量的增加,操作的复杂度迅速增加。如果您想要匹配整个单词,还可以考虑更改此函数,因为contains匹配子字符串。
无论如何,获取结果并使用逐位and来减少它们。您需要两个导入:
from functools import reduce
from operator import and_
df[reduce(and_, d.values())]这里的最后一行只选择包含任何单词的元素。或者,您可以尝试使用np.where将缩减的输出从{True, False}映射到{'Y', 'N'}。
https://stackoverflow.com/questions/63818908
复制相似问题