Python 筛选行并将结果保存到新列中

Python 筛选行并将结果保存到新列中,python,pandas,Python,Pandas,我有一个如下的数据集 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 ch

我有一个如下的数据集

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
我想在三列(用户名、Tweet和标记)中搜索以下字符串列表:

查看是否至少在一列中有一个或多个上述术语。该检查应保存在一个新列中,即Terms from list,其中将存储在所有列中找到的术语(没有重复项,即,如果同一术语出现在更多列中,我只需提及一次)

预期产出将是:

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

你能给我一些建议,告诉我怎么做,并给我指出正确的方向吗?谢谢

您可以试试
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)]
尝试以下步骤

步骤1:对于df中的每个元素,如果字符串中的任何单词(x.split(“”)[i]==string)也是列表中的单词,请保留它,否则它将给出一个空列表([])。i、 e.我们将有一个列表(长度为1或零)。因此,我们从列表中选择第一项(val[0]),如果它存在的话

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:我们将三列中组合列表的唯一元素分配给“列表中的术语”列

df['Terms in list'] = step1.apply(lambda x: set(x[0]  + x[1]  + x[2]), axis = 1) 

df['Terms in list'] = step1.apply(lambda x: set(x[0]  + x[1]  + x[2]), axis = 1)