我想在dataframe中舍入金额2的舍入差额。由于不同的用户插入的金额不同,因此,金额2的差异是正常的,因此我希望合并。例如

dataframe_1

item  Amount
A      100
B      100
A      40

dataframe_2 

item  Amount
A      98
B      102
A      35

当前,当我合并.merge(how='outer', indicator=True, on=['item', 'Amount'])时,合并数据帧中什么也没有。

所需的输出:



item  Amount   item   Amount  _merge
A      100      A       98      both
B      100      B       102     both
A      40                     left_only
                A       35     right_only

所以我需要+2和​​-2的差来匹配

分析解答

在df1中创建一个名为“ in_margin”的True/False列。将其复制到df2,将False替换为其他内容(例如负数),然后进行外部联接并删除in_margin列。

df1['in_margin'] = df1['Amount'].between(df2['Amount']-2, df2['Amount']+2)
df2['in_margin'] = df1['in_margin'].replace(False, -999)
df1.merge(df2, on=['item','in_margin'], how='outer', indicator=True).drop(columns='in_margin')

输出量

item    Amount_x    Amount_y    _merge
0   A   100.0       98.0        both
1   B   100.0       102.0       both
2   A   40.0        NaN         left_only
3   A   NaN         35.0        right_only