在两个Pandas数据帧中查找一对多匹配

2024-06-07 23:51:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为财务数据建立一个通用的匹配过程。目标是获取一组具有较大事务的数据,并将其与具有较小事务的数据集相匹配。有的是一对多,有的是一对一。 在某些情况下,它可能会被反转,方法的一部分是以相反的顺序反馈未命中的匹配,以捕获那些可能的匹配。在

我要迭代三个模块,但我要完成三个不同的模块。我在我的数据中看到了可能的匹配项,这些匹配项应该被提取,但是没有。在

也没有明确的匹配标准,所以假设是如果我将数据集按日期顺序排列,并寻找匹配值,我希望第一个匹配,因为它应该更接近于同一时间段。在

我正在使用Pandas和Itertools,但可能不是理想的格式。任何帮助,以获得一致的匹配将不胜感激。在

Data examples:

Large Transaction Size:

AID    AIssue Date    AAmount
1508     3/14/2018   -560
1506     3/27/2018    -35
1500     4/25/2018   5000

Small Transaction Size:
BID     BIssue Date   BAmount
1063     3/6/2018     -300
1062     3/6/2018     -260
839      3/22/2018     -35
423      4/24/2018    5000

Expected Results
AID     AIssue Date   AAMount    BID     BIssue Date   BAmount
1508     3/14/2018     -560      1063      3/6/2018     -300
1508     3/14/2018     -560      1062      3/6/2018     -260
1506     3/27/2018      -35       839      3/22/2018     -35
1500     4/25/2018     5000       423      4/24/2018    5000

but I usually get
AID     AIssue Date   AAMount    BID     BIssue Date   BAmount
1508     3/14/2018     -560      1063      3/6/2018     -300
1508     3/14/2018     -560      1062      3/6/2018     -260
1506     3/27/2018      -35       839      3/22/2018     -35

5000不匹配。这是一个例子,但是当观察更大的数据集时,正负似乎不是因素。在

当检查每个不匹配的结果时,我看到至少有一个$5000的交易,我希望是1-1匹配,但它不在结果中。在

^{pr2}$

Tags: 模块数据目标sizedate过程事务transaction
2条回答

在我的模块iterate“one”to“u many”中,我计算的行长度不正确。我需要替换

end_row = len(dfLarge.columns[dID]) - 1

^{pr2}$

IIUUC,匹配只是在大的DataFrame中查找事务,该事务是在小事务中的事务上或与事务最近的未来事务。您可以使用pandas.merge_asof()根据将来最近的日期执行匹配。在

import pandas as pd
# Ensure your dates are datetime
df_large['AIssue Date'] = pd.to_datetime(df_large['AIssue Date'])
df_small['BIssue Date'] = pd.to_datetime(df_small['BIssue Date'])

merged = pd.merge_asof(df_small, df_large, left_on='BIssue Date', 
                       right_on='AIssue Date', direction='forward')

merged现在是:

^{pr2}$

如果你期望事情永远不匹配,你也可以抛出一个tolerance将匹配限制在一个较小的窗口内,这样一来,DataFrame中缺少的值不会将所有内容都丢弃。在

相关问题 更多 >

    热门问题