python基于部分字符串匹配合并两个panda数据帧

python基于部分字符串匹配合并两个panda数据帧,python,string,pandas,dataframe,Python,String,Pandas,Dataframe,我是Python新手,在连接两个Panda数据帧时遇到了很多困难,因为合并应该基于部分字符串匹配。更具体地说: 我有一个名为df的数据帧,看起来像这样: {“writenat”:“2015-01-01T18:31:01+00:00”,“内容”:“印度的银行将在2015年增加作为资本缓冲的债券的销售”} 其中大约有10000行看起来像上面的 现在,我有另一个名为compNames的数据帧,它看起来像这样: {“股票代码”:“A”,“名称”:“安捷伦科技有限公司”,“关键字”:“安捷伦”} 我有大约

我是Python新手,在连接两个Panda数据帧时遇到了很多困难,因为合并应该基于部分字符串匹配。更具体地说:

我有一个名为
df
的数据帧,看起来像这样:

{“writenat”:“2015-01-01T18:31:01+00:00”,“内容”:“印度的银行将在2015年增加作为资本缓冲的债券的销售”}

其中大约有10000行看起来像上面的

现在,我有另一个名为
compNames
的数据帧,它看起来像这样:

{“股票代码”:“A”,“名称”:“安捷伦科技有限公司”,“关键字”:“安捷伦”}

我有大约500行用于
compNames
dataframe

我试图通过以下机制将
compNames
中的股票代码值分配给
df
的匹配条目:

  • 检查整列
    compNames['keyword']
    中是否有任何项目 包含在
    df['content']

  • 如果存在匹配项,则将匹配的单词作为单独的
    df
    数据帧的列(例如
    df['matchedName']

  • 如果有多个匹配项,则创建匹配词列表 到
    df['content']

  • 最后,通过使用
    df['matchedName']
    compNames['keyword']
    作为我的关键变量

  • 到目前为止,我得到的是:

    # Load select company names
    compNames = pd.read_csv("compNameList_LARA.txt")
    compList = '|'.join(compNames['keyword'].tolist())
    df['compMatch'] = df.content.str.contains(compList)
    
    # drop unmatched articles
    df = df[df['compMatch']==True]
    
    # assign firm names
    df['matchedName'] = df['content'].apply(lambda x: [x for x in   compNames['keyword'].tolist() if x in df['content']])
    
    但是,当我这样做时,我会得到一个
    df['matchedName']

    你能帮我找出哪里出了问题吗?非常感谢


    -金

    明白了。我只需要做:

    df['content'] = df['content'].str.lower().str.split()
    df['matchedName'] = df['content'].apply(lambda x: [item for item in x if item in compNames['keyword'].tolist()])