如何将dataframe列与list匹配,以及如何使用list中的元素创建新列

时间:2019-02-18 14:37:15

标签: python-3.x

我有一个pandas df栏,里面有一些文字。现在,我想将此文本的每个单词与列表中的元素进行比较,如果有匹配项,那么我想将该单词添加到新列中。虽然,我可以使用循环来提取这些内容(尽管不是很理想),但是当涉及不匹配的文本时,我将无法附加任何内容。对于前。

python列表: 身体部位= [“拇指”,“后背”,“肘部”,“肩膀”,“脚踝”,“腿筋”,“膝盖”]

此外,以下表达式仅部分执行该任务,并且在接收到匹配项或不匹配项时仅追加0或1。

input_file_1 ['bodyparts'] = input_file_1 ['Description']。apply(lambda x:sum(i in bodyparts for i in x.split()))............. .... 我可以使用其他任何表达式,实际上可以附加匹配的单词吗?

尽管,我可以使用循环来提取这些内容(尽管不是很理想),但是当涉及不匹配的文本时,我将无法附加任何内容。

此外,以下表达式仅部分执行该任务,并且在接收到匹配项或不匹配项时仅追加0或1。

input_file_1 ['bodyparts'] = input_file_1 ['Description']。apply(lambda x:sum(i in bodyparts for i in x.split()))

预期产量

身体部位

拇指

后退

没有

实际输出

1

1

1

0

1 个答案:

答案 0 :(得分:0)

我认为这可以完成工作。

bodyparts = ['thumb', 'back', 'elbow', 'shoulder', 'ankle', 'hamstring', 'knee']

def search_bodyparts(s, bodyparts):
    found_bodyparts = [bodypart for bodypart in bodyparts if bodypart in s]
    if len(found_bodyparts)>0:
        return ', '.join(found_bodyparts)
    else:
        return None

df['bodyparts'] = df['Description'].apply(lambda x : search_bodyparts(x, bodyparts))