我有一个如下数据集
Name Surname Username Tweet Tags
Matthew Fields m.fields I love summertime summer summertime sun holiday
Fion Stewart fion It is time to enjoy ourselves time
Christine Bold chris89 Enjoy your summer summer
Vera Lovable v.lov2 It's sunny outside sun summer holiday我想在三列(用户名、推文和标签)中搜索以下字符串列表:
list_strings=['summer','summertime','sun','holiday']查看是否至少在一列中存在上述术语中的一个或多个。这个检查应该保存在一个新的列中,术语从列表中,在那里将存储在所有列中找到的术语(没有重复,即如果相同的术语出现在更多的列中,我只需要提到一次)。
预期输出为:
Name Surname Username Tweet Tags Terms from list
Matthew Fields m.fields I love summertime summer summertime sun holiday summer, summertime, sun, holiday
Christine Bold chris89 Enjoy your summer summer summer
Vera Lovable v.lov2 It's sunny outside sun summer holiday sun, summer, holiday你能给我一些关于如何做这件事的建议并给我指出正确的方向吗?谢谢
发布于 2020-06-29 00:05:06
你可以试试str.contains
df=df[df['Tweet'].str.contains('|'.join(list_strings))]如果有多个列
df=df[df[['Tweet','Tags']].apply(lambda x : x.str.contains('|'.join(list_strings))).any(1)]发布于 2020-06-29 02:03:20
尝试下面的步骤。
步骤1:对于df中的每个元素,如果字符串中的任何单词(x.split(‘')i == string)也是list_strings中的单词,则保留它,否则将给出一个空列表([])。即,我们将有一个列表列表(长度为1或0)。所以我们从列表中选择第一项(val),如果它存在的话。
list_strings=['summer','summertime','sun','holiday']
step1 = df[['Username', 'Tweet', 'Tags']].applymap(lambda x: (([val[0] for val in [([string for i in range(len(x.split(' '))) if (x.split(' ')[i] == string )]) for string in list_strings ] if val]) ))步骤2:我们将来自三个列的组合列表的唯一元素分配给列"Terms in List“。
df['Terms in list'] = step1.apply(lambda x: set(x[0] + x[1] + x[2]), axis = 1) https://stackoverflow.com/questions/62624949
复制相似问题