Python 带有for循环和if-else语句的Lambda函数

Python 带有for循环和if-else语句的Lambda函数,python,pandas,lambda,Python,Pandas,Lambda,我有一个像这样的数据帧df index Posts clean_text 0 Hi I am fine. [Hi, I, am, fine] 1 You are a piece of shit. [You, are, a, piece, of, shit] . . . 我有一个名为corpus的列表,其中有3000个脏话 我想通过检查所有行的条件,浏览列clean_text,并将一个新行re

我有一个像这样的数据帧
df

index       Posts                    clean_text
  0     Hi I am fine.              [Hi, I, am, fine]
  1     You are a piece of shit.   [You, are, a, piece, of, shit]
.
.
.
我有一个名为
corpus
的列表,其中有3000个脏话

我想通过检查所有行的条件,浏览列
clean_text
,并将一个新行
result
添加到
df
。条件是: 如果
clean_text
列中任何一行的列表中的任何一个单词出现在
语料库中,则
列的
结果将具有字符串
无关
,否则
相关

示例:如果列表中的任何单词
[Hi,I,am,fine]
出现在
语料库中
,则列
结果将具有
无关
,否则
相关
。由于此列表没有任何脏话,因此输出应该是相关的

所需输出为:

index       Posts                    clean_text                       result
  0     Hi I am fine.              [Hi, I, am, fine]                  Relevant
  1     You are a piece of shit.   [You, are, a, piece, of, shit]     Irrelevant
.
.
.
我想用lambda函数来做这个。到目前为止,我已经这样做了-

df['result']=df['clean_text'].map(lambda x:[如果w不在语料库中,则与x中的w相关])
首先,我无法在这里编写
else
部分,其次,它显示了如下所示的不良输出

index       Posts                    clean_text                       result
  0     Hi I am fine.              [Hi, I, am, fine]                  [Relevant, Relevant, Relevant, Relevant]
  1     You are a piece of shit.   [You, are, a, piece, of, shit]     [Relevant, Relevant, Relevant,...]
.
.
.
我也尝试过像这样编写一个“for”循环,但这需要很多时间:

for i in range(df.shape[0]):
    for word in df.loc[i]['clean_text']:
      if word in corpus:
        df['result'] = "Irrelevant"
        #break
      else:
        #continue
        df['result'] = "Relevant"
请帮助我使用lambda函数获得所需的输出。

使用
corpus=set(corpus)

然后你可以用

df['clean_text'].map(lambda l: "Relevant" if any(x in corpus for x in l) else "Irrelevant")
请注意,您使用的是
lambda
,这一事实实际上并不相关。你本可以这样做:

def search_corpus(tokens):
    if any(token in corpus for token in tokens):
        return "Relevant"
    return "Irrelevant" 
并且做:

df['clean_text'].map(search_corpus)

这不会影响性能<代码>lambda
表达式不会创建任何特殊的内容,而且您永远不必使用它。

为什么它必须是lambda表达式?为什么不是一个常规的函数定义呢?可能最大的问题是,您使用的是语料库列表。您应该使用
集合
@juanpa.arrivillaga,集合如何帮助?因为
集合
中的成员资格测试是固定时间,而列表中是线性时间。@juanpa.arrivillaga我可以将其更改为集合。感谢您的解决方案。另外,是否有一种方法可以检查哪些单词与语料库中的单词匹配,并将它们添加到单独的列中。@dipanjana为什么不
map(lambda l:[x代表语料库中的x如果语料库中的x])