如何匹配这两个数据帧并得到以下结果?

2024-09-23 20:21:53 发布

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

我有以下数据帧: 付款是带有值的付款名称行

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

Payment     Value
payment1    100
payment2    200
payment3    300

项目成本是项目名称及其成本的一行

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    

最后一行付款留空,因为支付项目的付款存在赤字

我能在熊猫身上做些什么来获得这个结果吗? 非常感谢

以下是我的数据帧的逻辑: I have added this image to help you understand my logic

付款按项目细分


Tags: 数据项目projectdataframevaluepaymentpd成本
2条回答

以下内容似乎适用于示例数据。你应该再检查一下。其思想是计算成本和付款的累计(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

我不确定我是否正确理解了这个问题,但是如果您想要合并两个数据帧,那么您需要至少有一列来匹配,即“值”或“成本”。因此,如果您有以下输入

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

然后,您可以使用“合并中”来合并这两个数据帧

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

让我知道我是否正确理解了这个问题

编辑:

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

这就是你要找的吗

相关问题 更多 >