[英]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
)。 然后,您可以對它們進行越來越多的排序,並嘗試相應地傳播Payment
和Project
。
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.