Python 3.x 如何使用基于函数返回的值在python中设置一个新列?

Python 3.x 如何使用基于函数返回的值在python中设置一个新列?,python-3.x,Python 3.x,我正在用python进行一些文本挖掘,如果搜索函数的返回值为true,则希望设置一个值为1的新列,如果返回值为false,则为0 我尝试了各种if语句,但都没有成功 下面是我所做工作的简化版本: import pandas as pd import nltk nltk.download('punkt') df = pd.DataFrame ( { 'student number' : [1,2,3,4,5], 'answer' : [ 'Yes,

我正在用python进行一些文本挖掘,如果搜索函数的返回值为true,则希望设置一个值为1的新列,如果返回值为false,则为0

我尝试了各种if语句,但都没有成功

下面是我所做工作的简化版本:

import pandas as pd
import nltk
nltk.download('punkt')

df = pd.DataFrame (
        {
        'student number' : [1,2,3,4,5],
        'answer' : [ 'Yes, she is correct.', 'Yes', 'no', 'north east', 'No its North East']
        # I know there's an apostrophe missing
        }
)       
print(df)

# change all text to lower case
df['answer'] = df['answer'].str.lower()

# split the answer into individual words
df['text'] = df['answer'].apply(nltk.word_tokenize)

# Check if given words appear together in a list of sentence 
def check(sentence, words): 
   res = [] 
   for substring in sentence: 
       k = [ w for w in words if w in substring ] 
       if (len(k) == len(words) ): 
            res.append(substring) 
   return res

# Driver code 
sentence = df['text'] 
words = ['no','north','east'] 
print(check(sentence, words))

这就是你想要的我想:

df['New'] = df['answer'].isin(words)*1
这个对我很有用:

for i in range(0, len(df)):
    if set(words) <= set(df.text[i]):
        df['NEW'][i] = 1
    else:
        df['NEW'][i] = 0
范围(0,len(df))内的i的

如果set(words),您的意思是如果答案包含['no'、'north'、'east'],那么答案是错误的??不,如果它包含这些单词,它将是正确的,所以我想设置一个“mark”列,如果它包含这些单词,则在其中加1,否则加0。当我这样说的时候,听起来很简单,但我真的很努力。非常感谢你,它建立了一个新的专栏,并进入了1和0,这就是我一直在努力做的。这将只包含“否”的答案标记为正确,其他所有答案标记为错误,而实际上只有最终答案是正确的,因此我仍然需要对其进行一些更改,但这可能是因为我原来的功能有错误。@JoPalmer太棒了!