这是一个关于理论的问题,也是一个关于语法的问题。我正在编写一个程序来对我的银行对帐单中的交易进行分类,但我被困在了最好的方法上。
我有一系列的“年度报表”数据框,每个都包含一年的交易额。这些列包括:
| 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是一个术语,可以用来识别哪些事务与哪些分类相关。
基本上,我需要将分类数据框中的搜索词与年度报表数据框中的description列进行匹配,然后将分类数据框中type列中的相应条目写入年度报表数据框中的type列。换句话说,我会得到这样的结果(请注意,在分类数据帧中没有'mbna‘的类型时,type列保留为空):
| description | type |
| sainsbury's | groceries |
| js sainsbury | groceries |
| amzn marketplace | amazon |
| mbna | |
| amazon | amazon |
| netflix | subscriptions |
| gap | clothes |
| vue | luxuries |至于规模,每个年度报表数据帧中有数千行,大约10种不同的类型,可能不到100个搜索项。
我有一些关于如何做到这一点的想法,但我是Pandas的初学者,所以我希望得到一些专家的帮助!
发布于 2020-04-12 04:24:47
这看起来像是一个非常简单的merge。您可以指定不同的列来匹配不同的数据帧。像这样的东西应该是有效的:
result_df = annual_statemenets_df.merge(classifications_df, left_on="description", right_on="search term")如果您关心效率,可以将匹配的列设置为索引并使用join,这会更快(如here所述)。
如果你想匹配字符串的一部分和你的搜索词,你应该使用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)https://stackoverflow.com/questions/61162994
复制相似问题