首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在两个数据帧之间高效地匹配字符串

如何在两个数据帧之间高效地匹配字符串
EN

Stack Overflow用户
提问于 2020-04-12 04:01:48
回答 1查看 50关注 0票数 1

这是一个关于理论的问题,也是一个关于语法的问题。我正在编写一个程序来对我的银行对帐单中的交易进行分类,但我被困在了最好的方法上。

我有一系列的“年度报表”数据框,每个都包含一年的交易额。这些列包括:

代码语言:javascript
运行
复制
| description      | type           |
| sainsbury's      |                |
| js sainsbury     |                |
| amzn marketplace |                |
| mbna             |                |
| amazon           |                |
| netflix          |                |
| gap              |                |
| vue              |                |

其中description是参与交易的供应商的名称,type是我要填充的空列。

我还有一个“分类”数据框架,它看起来像这样:

代码语言:javascript
运行
复制
| type           | search term      |
| groceries      | sainsbury        |
| amazon         | amzn marketplace |
| amazon         | amazon           |
| subscriptions  | netflix          |
| clothes        | gap              |
| luxuries       | vue              |

其中type是我决定的一组东西,它很好地总结了我花了多少钱,而search term是一个术语,可以用来识别哪些事务与哪些分类相关。

基本上,我需要将分类数据框中的搜索词与年度报表数据框中的description列进行匹配,然后将分类数据框中type列中的相应条目写入年度报表数据框中的type列。换句话说,我会得到这样的结果(请注意,在分类数据帧中没有'mbna‘的类型时,type列保留为空):

代码语言:javascript
运行
复制
| description      | type           |
| sainsbury's      | groceries      |
| js sainsbury     | groceries      |
| amzn marketplace | amazon         |
| mbna             |                |
| amazon           | amazon         |
| netflix          | subscriptions  |
| gap              | clothes        |
| vue              | luxuries       |

至于规模,每个年度报表数据帧中有数千行,大约10种不同的类型,可能不到100个搜索项。

我有一些关于如何做到这一点的想法,但我是Pandas的初学者,所以我希望得到一些专家的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-12 04:24:47

这看起来像是一个非常简单的merge。您可以指定不同的列来匹配不同的数据帧。像这样的东西应该是有效的:

代码语言:javascript
运行
复制
result_df = annual_statemenets_df.merge(classifications_df, left_on="description", right_on="search term")

如果您关心效率,可以将匹配的列设置为索引并使用join,这会更快(如here所述)。

如果你想匹配字符串的一部分和你的搜索词,你应该使用replace,它支持正则表达式。首先,您需要将搜索词转换为正则表达式,以便在查找其中的词时选择整个短语,如下所示:

代码语言:javascript
运行
复制
classifications_df["search term"] = ".*" + classifications_df["search term"] + ".*"

然后replace将替换整个短语:

代码语言:javascript
运行
复制
to_replace = classifications_df["search term"].tolist()
replace_with = classifications_df["type"].tolist()

annual_statemenets_df["type"] = annual_statemenets_df["description"].replace(to_replace, replace_with, regex=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61162994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档