Python: 数据框和列表组成的IF语句

Python: IF statement consisting of data frame and list

我是 python 的新手,需要帮助。 我有一个从数据框中获得的关键字列表,如下所示: key_a_list = df_key_words['words'].tolist()

我有第二个数据框,其中包含语句:df_response['statement'] 我已经更正了 df_response['statement'] 列中的拼写错误、标记化和词干化文本。 我需要检查 key_a_list 中是否有任何单词与 df_response['statement'] 中的单词相匹配;然后我必须设置一个计数器来计算 key_a_list 中的单词出现在 df_response['statement'] 中的次数。

感谢您的宝贵时间和帮助,非常感谢:)

这是我当前的代码,但它给我一个错误:ValueError:长度必须匹配才能比较

count_a = 0
def count(x):
    for x in key_a_list:
        if key_a_list == df_response['statement']:
            count_a = count_a + 1      
    return count_a

df_response['statement'] = df_response['statement'].apply(lambda x: " ".join([count(x) for word in x.split()]))

key_a_list 由以下单词组成:['think'、'college'、'education'、'help'、'better'、'prepare'、'career'、'chosen'、'eventually'、'enable'、'enter'、'job'、'market'、'field' , 'like', 'make', 'choice', 'social', 'orientation', 'believe', 'additional', 'year', 'improve', 'competence', 'worker', 'prove', 'capable', 'completing', 'degree', 'rich', 'succeed', 'feel', 'important', 'show', 'intelligent', 'person', 'order', 'salary', 'later' , 'on', 'want', 'the', 'good', 'life', 'study', 'highschool', 'actuary', 'find'、'highpaying'、'obtain'、'prestigious']

df_response['statement'] 看起来如下:

                  statement
0                  parent said
1         want make difference
2                    dont know
3                         rich
4               go career want
5                      actuary
6                  social life
7             expected society

df_response 的期望输出是:

                  statement         count_a
0                  parent said       0
1         want make difference       2
2                    dont know       0
3                         rich       1
4               go career want       2
5                      actuary       1
6                  social life       2
7             expected society       0

我认为您想将 if 语句中的 key_a_list 更改为 "x",因为 x 包含循环正在迭代的 key_a_list 中的每个单词。接下来,您可以使用关键字 "in" 来检查 x 是否在 df_response["statement"] 中,如果是则向上计数。

此外,您可以在函数内部定义 count_a,这样它就不是全局变量,以避免每次您 运行 函数 count(x) 而不是添加到现有计数器时都重置它。

我觉得应该是这样的,有不对的请有经验的大佬指正:

def count(x):
    count_a = 0
    for x in key_a_list:
        if x in df_response['statement']:
            count_a = count_a + 1      
    return count_a

没有理由在这里定义您自己的函数或使用 apply()。值得庆幸的是,pandas 系列有一个方便的内置函数:series.str.count()。熟悉 pandas series.str... 方法可以为您节省大量工作!只需使用管道字符 (|) 到 join 您的列表,使其成为正则表达式模式,然后 count it

df['statement'].str.count('|'.join(key_a_list))

0    0
1    2
2    1
3    1
4    2
5    1
6    2
7    0

df['count_a']=df['statement'].str.count('|'.join(key_a_list))

df

    statement               count_a
0   parent said             0
1   want make difference    2
2   dont know               1
3   rich                    1
4   go career want          2
5   actuary                 1
6   social life             2
7   expected society        0