如何有效地匹配两个数据帧中的字符串

用户名

这既是关于理论的问题,也是关于语法的问题。我正在编写一个程序来对我的银行对账单中的交易进行分类,而我一直坚持这样做的最佳方法。

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

| description      | type           |
| sainsbury's      |                |
| js sainsbury     |                |
| amzn marketplace |                |
| mbna             |                |
| amazon           |                |
| netflix          |                |
| gap              |                |
| vue              |                |

description参与交易的供应商名称在哪里type,我想填写一个空列。

我还有一个“分类”数据框,如下所示:

| type           | search term      |
| groceries      | sainsbury        |
| amazon         | amzn marketplace |
| amazon         | amazon           |
| subscriptions  | netflix          |
| clothes        | gap              |
| luxuries       | vue              |

type我所决定的一组事情在哪里提供了我花钱花的不错的总结,并且search term是一个术语,可以用来识别哪些交易与哪些分类相关。

基本上,我需要将分类数据框中的搜索词与年报表数据框中的描述列匹配,然后将相应的条目从分类数据框中的类型列写入年报表数据框中的类型列。换句话说,我将得到此结果(请注意,在分类数据框中没有“ mbna”的类型的情况下,类型列留为空白):

| description      | type           |
| sainsbury's      | groceries      |
| js sainsbury     | groceries      |
| amzn marketplace | amazon         |
| mbna             |                |
| amazon           | amazon         |
| netflix          | subscriptions  |
| gap              | clothes        |
| vue              | luxuries       |

至于规模,每个年度报表数据框中有成千上万的行,大约有十种不同的类型,并且可能少于一百个搜索词。

我对此有一些想法,但是我是Pandas的初学者,所以希望获得一些专家的帮助!

丹尼尔·格芬

这似乎是一个非常简单的合并您可以指定不同的列以匹配不同的数据框。这样的事情应该起作用:

result_df = annual_statemenets_df.merge(classifications_df, left_on="description", right_on="search term")

如果你关心效率,你可以设置匹配列作为指标,使用加入,这是更快(如说在这里)。

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

classifications_df["search term"] = ".*" + classifications_df["search term"] + ".*"

然后replace将替换整个短语:

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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python pandas中的两个数据帧之间有效地搜索?

如何使用python有效地匹配两个大列表之间的字符串?(510.000.000比较)

如何有效地有条件地合并两个数据帧

有效地在python中合并两个大字符串

如何有效地找到两个给定的子字符串之间的字符串?

如何在Python中有效地匹配两个数组值?

根据某些条件将熊猫数据帧有效地分为两个数据帧

如何有效地找到句子数组中字符串数组的确切个数?

如何有效地检查字符串是否包含两个列表中的至少一个元素

如何在javascript中有效地匹配字符串中间的数字?

如何在Javascript中有效地匹配和分组字符串?

如何有效地找到两个列表中匹配元素的索引

如何有效地从 Scala 中的字符串中删除非单词字符?

如何有效地排序R中字符串中的字符?

如何使用Go字节有效地替换两个字符串定界符之间的字符串出现?

如何有效地计算字符串中字符频率的前缀和?

如何基于行的字符串值有效地获取数据

如何在python中有效地合并两个具有容差的数据帧

合并两个数据框,并尝试有效地访问和使用数据

如何使用两个规则有效地将数据帧子集化为列表列表

如何使用熊猫有效地找到两个大数据帧之间的逆交集?

如何有效地提取C ++中的字符串模式?

如何有效地将字符串拆分成J中的行?

在Java中,如何更有效地附加字符串?

如何有效地从Java中的ArrayList连续连接字符串的连续间隔?

如何在R中有效地对字符串中的字母重新排序?

如何有效地提取字符串中的实例值

如何有效地删除字符串中连续的重复单词或短语

如何有效地从大txt文件中仅读取字符串