如何根据条件删除行?

2024-06-07 09:47:57 发布

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

我想找到:

  1. 在提供程序中找不到数据,但在记帐中找到数据
  2. 在会计中找到数据,但在提供程序中找不到
  3. 在accounting和provider中都找到了数据,但金额不匹配

为此,我必须使用提供的三个表会计助手提供者 首先,我在发票上加入了会计助手。 然后我加入了toID上的提供者。 在合并内部联接之后,我有一个表,在本例中,它创建了两个不必要的记录

会计表如下所示:

^{tb1}$

辅助表:

^{tb2}$

提供者表:

^{tb3}$

使用merge-internaljoin连接三个表后,我得到了一个表:

^{tb4}$

预期结果应仅为2条记录,而不是4条记录:

doc_nramountinvoicetoIDtIDtAmountDATE
a1-9.17i1toid1t2-9.172021-01-19
a29.17i1toid1t19.172021-01-18

想不出如何筛选表以获得预期结果的方法

尝试根据文档编号删除重复项,但结果显示:

doc_nramountinvoicetoIDtIDtAmountDATE
a1-9.17i1toid1t2-9.172021-01-19
a29.17i1toid1t2-9.172021-01-18

它应该有不同的tID单据编号和金额匹配tAmount。 加入后,它似乎复制了doc\u nr与其他doc\u nrtID一起创建它

关于如何清理这些重复行并达到预期结果,您有什么想法吗


Tags: 数据程序doc助手记录提供者金额amount
2条回答

试试这个:

>>> df.assign(x=df['amount'].eq(df['tAmount']).cumsum()).replace(0, np.nan).dropna().drop_duplicates(subset=['doc_nr', 'x']).drop('x', axis=1)
  doc_nr amount invoice   toID tID tAmount        DATE
1     a1  -9.17      i1  toid1  t2   -9.17  2021-01-19
2     a2   9.17      i1  toid1  t1    9.17  2021-01-18
>>> 

正如您提到的,您希望amounttAmount匹配:

It should have different tID; doc_nr and amount match tAmount.

然后,您还应该在第二个merge语句中包含这两个字段,如下所示:

(Accounting.merge(Helper)
           .merge(Provider, left_on=['toID', 'amount'], right_on=['toID', 'tAmount'])
)

使用left_on=right_on=参数包括相关的2个合并字段

结果:

  doc_nr  amount invoice   toID tID        DATE  tAmount
0     a1   -9.17      i1  toid1  t2  2021-01-19    -9.17
1     a2    9.17      i1  toid1  t1  2021-01-18     9.17

相关问题 更多 >

    热门问题