我想找到:
我想找到
為了實作這個目標,我必須使用三個提供的表會計、助手、供應商。 首先,我將Accounting與Helper的發票連接起來。 然后我把它與供應商的toID連接起來。 在合并行內后,我有一個表,在這種情況下會產生兩條不必要的記錄。
會計表看起來像:
會計表看起來像:
| doc_nr | amount | 發票。||
|---|---|---|---|
| a1 | 9.17 | 9.17 | i1 |
| a2 | 9.17 | 9.17 | i1 |
幫助表:
| toID | invoice |
|---|---|
| toid1 | i1 |
供應商表:
| toID | tID | DATE | tAmount|||
|---|---|---|---|---|---|
| toid1 | t1 | 2021-01-18 | 9.17 | ||
| toid1 | t2 | t2 | 2021-01-19 | T2 | 9.17 |
在使用merge inner join連接三個表后,我得到一個表:
| doc_nr | amount | 發票toID | tIDtAmount | DATE | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| a1 | 9.17 | 9.17 | i1 | i1 | toid1 | Toid1 | t1 | t1 | 9.17 | 9.17 | 2021-01-18 | 2021年1月18日 |
| a1 | 9.17 | |||||||||||
| 9.17 | i1 | i1 | toid1 | Toid1 | t2 | t2 | 9.17 | 9.17 | 2021-01-19 | 2021-01-19 | ||
| a2 | 9.17 | |||||||||||
| 9.17 | i1 | i1 | toid1 | Toid1 | t1 | t1 | 9.17 | 9.17 | 2021-01-18 | 2021年1月18日 | ||
| a2 | 9.17 | |||||||||||
| 9.17 | i1 | i1 | toid1 | Toid1 | t2 | t2 | 9.17 | 9.17 | 2021-01-19 | 2021-01-19 |
預期結果應該是只有2條記錄,而不是4條:
| doc_nr | amount | 發票toID | tIDtAmount | DATE | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| a1 | 9.17 | 9.17 | i1 | i1 | toid1 | Toid1 | t2 | t2 | 9.17 | 9.17 | 2021-01-19 | 2021-01-19 |
| a2 | 9.17 | |||||||||||
| 9.17 | i1 | i1 | toid1 | Toid1 | t1 | t1 | 9.17 | 9.17 | 2021-01-18 | 2021年1月18日 |
想不出如何過濾該表以獲得預期結果的方法。
試著根據doc_nr洗掉重復的內容,但結果是:
| doc_nr | amount | 發票toID | tIDtAmount | DATE | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| a1 | 9.17 | 9.17 | i1 | i1 | toid1 | Toid1 | t2 | t2 | 9.17 | 9.17 | 2021-01-19 | 2021-01-19 |
| a2 | 9.17 | |||||||||||
| 9.17 | i1 | i1 | toid1 | Toid1 | t2 | t2 | 9.17 | 9.17 | 2021-01-18 | 2021-01-18 |
它應該有不同的tID;doc_nr和amount符合tAmount。 在連接后,它似乎重復了doc_nr,并與其他doc_nr和tID一起創建。
對于如何清理這些重復的行并達到預期的結果有什么想法嗎?
uj5u.com熱心網友回復:
試試這個:
>>> df. assign(x=df['amount'].eq(df['tAmount']).cumsum()。 replace(0, np.nan).dropna().drop_duplicates(subset=['doc_nr', 'x']) 。 drop('x'/span>, 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
>>>
uj5u.com熱心網友回復:
正如你所提到的,你希望amount與tAmount相匹配:
它應該有不同的tID;doc_nr和amount匹配tAmount。
那么,你應該在第二個合并陳述句中也包括這2個欄位,如下所示:
2.(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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/309187.html
標籤:
上一篇:我怎樣才能把一欄分成多欄?
下一篇:在行上滾動的日期,多個鍵
