我希望自動對銀行交易進行對賬。有兩張表,銀行表和系統表,其中系統表中的交易延遲了幾天。這些表的長度各不相同,并且沒有 1:1 匹配的事務。問題是找到一種一致的方法來識別和分組協調和非協調事務。我遇到的第一個挑戰是根據日期范圍和數量加入/合并表格。Pandas.merge_asof 適合基于日期范圍連接,但僅限于 1 個基于列的連接。請參見下面的示例表:bankdf = pd.DataFrame({'BankDate': pd.date_range('2018-12-28', periods=10, freq='3D'), 'Amount': np.array([140,107,132,188,75,152,88,159,132,107])})systemdf = pd.DataFrame({'SystemCreditDate': pd.date_range('2019-01-04', periods=9, freq='3D'), 'Amount': np.array([107,132,190,75,152,88,110,132,132])})bankdfOut[119]: Amount BankDate0 140 2018-12-281 107 2018-12-312 132 2019-01-033 188 2019-01-064 75 2019-01-095 152 2019-01-126 88 2019-01-157 159 2019-01-188 132 2019-01-219 107 2019-01-24systemdfOut[120]: Amount SystemCreditDate0 107 2019-01-041 132 2019-01-072 190 2019-01-103 75 2019-01-134 152 2019-01-165 88 2019-01-196 110 2019-01-227 132 2019-01-258 132 2019-01-28需要根據“金額”匹配且日期差異小于 6 天(SystemCreditDate - BankDate)< 6)來連接 2 個表。最終結果應如下所示: Amount BankDate SystemCreditDate1 107 2018-12-31 2019-01-042 132 2019-01-03 2019-01-073 75 2019-01-09 2019-01-134 152 2019-01-12 2019-01-165 88 2019-01-15 2019-01-196 132 2019-01-21 2019-01-25
1 回答

慕標琳琳
TA貢獻1830條經驗 獲得超9個贊
使用DataFrame.merge和刪除不符合規則的行:
df = bankdf.merge(systemdf)
mask = (df['SystemCreditDate']-df['BankDate']).abs().dt.days<6
df = df.loc[mask, :]
print(df)
BankDate Amount SystemCreditDate
0 2018-12-31 107 2019-01-04
2 2019-01-03 132 2019-01-07
6 2019-01-21 132 2019-01-25
8 2019-01-09 75 2019-01-13
9 2019-01-12 152 2019-01-16
10 2019-01-15 88 2019-01-19
或刪除負數:
df = bankdf.merge(systemdf)
mask = (df['SystemCreditDate']-df['BankDate']).dt.days
mask = mask.le(6) & ~mask.lt(0)
df = df.loc[mask, :]
添加回答
舉報
0/150
提交
取消