簡體   English   中英

如何匹配兩個數據框並獲得以下結果?

[英]How can I match the two dataframe and get the following result?

我有以下數據框:付款是帶有值的付款名稱行

payment = pd.DataFrame({'Payment':["payment1","payment2","payment3"],'Value':[100,200,300]})

Payment     Value
payment1    100
payment2    200
payment3    300

和 project_cost 是項目名稱及其成本的行

project_cost = pd.DataFrame({'Project':["Project1","Project2","Project3"],'Cost':[200,300,400]})

Project        Cost
Project1       200
Project2       300
Project3       400

我基本上想將付款與項目相匹配。

如何獲得以下數據框?

Project     Cost      Payment 
Project1     100      payment1
Project1     100      payment2
Project2     100      payment2
Project2     200      payment3
Project3     100      payment3
Project3     300    

付款的最后一行留空,因為存在支付項目的付款赤字。

我可以在熊貓中做些什么來獲得這個結果? 非常感謝

以下是我的數據框的邏輯: 我添加了這張圖片來幫助你理解我的邏輯

付款被分解以與項目相匹配。

我不確定我是否正確理解了這個問題,但是如果您想合並兩個數據框,那么您至少需要一列來匹配,即“價值”或“成本”。 所以如果你有以下輸入

payment = pd.DataFrame({'Payment':["payment1","payment2","payment3"],'Cost':[100,200,300]})
project_cost = pd.DataFrame({'Project':["Project1","Project2","Project3"],'Cost':[200,300,400]})

然后你可以通過在pandas中使用merge來合並兩個數據框

result = pd.merge(payment, project_cost, on= 'Cost')

讓我知道我是否正確理解了問題。

編輯:

    Payment Cost    Project
0   payment1    200 Project1
1   payment2    200 Project1
2   payment3    200 Project1

這是你想要的?

以下似乎適用於示例數據。 你應該多檢查一下。 這個想法是您計算成本和付款的累積( cumsum )。 然后,您可以對它們進行越來越多的排序,並嘗試相應地傳播PaymentProject

project_cost['accum'] = project_cost['Cost'].cumsum()
payment['accum'] = payment['Value'].cumsum()

(payment.merge(project_cost, on='accum', how='outer')
    .sort_values('accum')
    .bfill()
)

輸出:

    Payment  Value  accum   Project   Cost
0  payment1  100.0    100  Project1  200.0
3  payment2  200.0    200  Project1  200.0
1  payment2  200.0    300  Project2  300.0
4  payment3  300.0    500  Project2  300.0
2  payment3  300.0    600  Project3  400.0
5       NaN    NaN    900  Project3  400.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM