python - 仅当单独列中的差异在 [-n, +n] 范围内时,才在公共(public)列上加入两个 DataFrame

标签 python pandas dataframe

我有两个数据框 df1df2如下所示:

df1

Date        BillNo.     Amount
10/08/2020  ABBCSQ1ZA   878
10/09/2020  AADC9C1Z5   11
10/12/2020  AC928Q1ZS   3998
10/14/2020  AC9268RE3   198
10/16/2020  AA171E1Z0   5490
10/19/2020  BU073C1ZW   3432

df2

Date        BillNo.     Amount
10/08/2020  ABBCSQ1ZA   876
10/11/2020  ATRC95REW   115
10/14/2020  AC9268RE3   212
10/16/2020  AA171E1Z0   5491
10/25/2020  BPO66W2LO   344

我的最终答案应该是:
final

Date        BillNo.     Amount
10/08/2020  ABBCSQ1ZA   876
10/16/2020  AA171E1Z0   5491
如何使用 Date BillNo. Amount 从两个数据框中找到共同的行当值范围的差异在 [-5,5] 之间时?
我知道如何使用以下方法查找常见行:
df_all = df1.merge(df2.drop_duplicates(), on=['Date', 'BillNo.', 'Amount'], 
                   how='outer', indicator=True)
但是,这并没有给出范围内的行。有谁能帮忙吗?
编辑:我们可以在 df1: 10/14/2020,AC9268RE3,198 中看到和 df2: 10/14/2020,AC9268RE3,212差异是 14,因此这不应该包含在公共(public)行中

最佳答案

我们可以合并,然后执行查询以删除不在范围内的行:

(df1.merge(df2, on=['Date', 'BillNo.'])
    .query('abs(Amount_x - Amount_y) <= 5')
    .drop('Amount_x', axis=1))

         Date    BillNo.  Amount_y
0  10/08/2020  ABBCSQ1ZA       876
1  10/16/2020  AA171E1Z0      5491
只要每一帧中只有一行对应于特定的 (Date, BillNo) 组合,这种方法就可以很好地工作。

关于python - 仅当单独列中的差异在 [-n, +n] 范围内时,才在公共(public)列上加入两个 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65456517/

相关文章:

python - 当数据框中值为 null 时,如何删除 json 对象中的元素?

python - Pandas Dataframe 同时拆分列列表

python - 创建新的 DataFrame 作为其他 DataFrame 列的有序组合

python - 使用 Python 加载 OpenCV XML 文件时出错

python - 糟糕的数学或糟糕的编程,也许两者兼而有之?

pandas - 当数据帧中存在 NaN 时使用 astype 时出错

python - Dash Python - 选择多个参数时制作子图

python - 两个列表之间的条目比较?

python - 使用 Pandas 计算每列出现的次数

pandas - 如何使用 Pandas 将新的数据帧行 append 到 csv?