Pandas:减去两个不匹配的数据帧

时间:2021-04-20 20:36:27

标签: python-3.x pandas

如果这是一个重复的问题,请原谅我,但我找不到答案,我什至不确定正确的术语是什么。

我有两个没有完全匹配行列的数据框。类似的东西:

Balances = pd.DataFrame({'Name':['Alan','Barry','Carl', 'Debbie', 'Elaine'],
              'Age Of Debt':[1,4,3,7,2],
              'Balance':[500,5000,300,100,3000],
              'Payment Due Date':[1,1,30,14,1]})

Payments = pd.DataFrame({'Name':['Debbie','Alan','Carl'],
              'Balance':[50,100,30]})

我想从基于 Name 的 Balances 数据框中减去 Payments 数据框,因此本质上是一个如下所示的新数据框:

pd.DataFrame({'Name':['Alan','Barry','Carl', 'Debbie', 'Elaine'],
              'Age Of Debt':[1,4,3,7,2],
              'Balance':[400,5000,270,50,3000],
              'Payment Due Date':[1,1,30,14,1]})

我可以想象必须遍历 Balances 的行,但是当两个数据帧都非常大时,我认为这不是很有效。

1 个答案:

答案 0 :(得分:1)

您可以使用.merge

tmp = pd.merge(Balances, Payments, on="Name", how="outer").fillna(0)
Balances["Balance"] = tmp["Balance_x"] - tmp["Balance_y"]
print(Balances)

打印:

     Name  Age Of Debt  Balance  Payment Due Date
0    Alan            1    400.0                 1
1   Barry            4   5000.0                 1
2    Carl            3    270.0                30
3  Debbie            7     50.0                14
4  Elaine            2   3000.0                 1