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

Jin*_*Lee 3 python string dataframe pandas

我是 Python 新手,在连接两个 Pandas 数据框时遇到了很多麻烦,因为合并应该基于部分字符串匹配。进一步来说:

我有一个名为的数据框df,如下所示:

{ "writtenAt":"2015-01-01T18:31:01+00:00", "content":" India\u2019s banks will ramp up sales of bonds that act as capital buffers in 2015" }

大约有 10,000 行,看起来像上面那样。

现在,我有另一个名为 的数据框compNames,如下所示:

{ "ticker":"A", "name":"Agilent Technologies Inc.", "keyword":"Agilent" }

我有大约 500 行compNames数据框。

我正在尝试通过以下机制将代码值分配给compNames匹配的条目df

  1. 检查整个列中的任何项目compNames['keyword']是否包含在df['content']

  2. 如果有匹配项,则将匹配的单词作为df数据帧的单独列返回(例如df['matchedName']

  3. 如果有多个匹配项,则为对应的条目创建一个匹配词列表 df['content']

  4. 最后,通过使用and 作为我的关键变量加入dfandcompNamesdf['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']])
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我会得到一个空列表 df['matchedName']

你能帮我弄清楚出了什么问题吗?非常感谢!!

-斤

Jin*_*Lee 6

弄清楚了。我只需要做:

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()])
Run Code Online (Sandbox Code Playgroud)