按列值的升序减去列值

Subtract columns value in ascending order value of a column

有一个数据框 mortgage_data,列名 mortgage_amount 和月份(按升序排列)

mortgage_amount_paid = 1000

mortgage_data:

name   mortgage_amount  month 
mark     400              1
mark     500              2
mark     200              3

如何在数据框中逐行使用 mortgage_amount_paid 按升序或月份扣除和更新 mortgage_amount 如果 mortgage_amount_paid 已完全扣除该金额,则添加一列 paid_full 为是,如果不是这样

,则添加为否

mortgage_data:

name   mortgage_amount  month  mortgage_amount_updated  paid_full 
mark     400              1         0                     yes
mark     500              2         0                     yes
mark     200              3       100                     no

这是一种方法:

import numpy as np
mortgage_amount_paid = 1000
df['mortgage_amount_updated'] = np.where(mortgage_amount_paid - df['mortgage_amount'].cumsum() >=0 , 0, df['mortgage_amount'].cumsum() - mortgage_amount_paid)
df['paid_full'] = np.where(df['mortgage_amount_updated'],'no','yes')

输出:

>>>
   name  mortgage_amount  month  mortgage_amount_updated paid_full
0  mark              400      1                        0       yes
1  mark              500      2                        0       yes
2  mark              200      3                      100        no

IIUC,你用cumsum得到累计按揭金额减去已付金额。然后过滤它以获取您的列:

total = df["mortgage_amount"].cumsum().sub(1000)
df["mortgage_amount_updated"] = total.where(total.gt(0), 0)
df["paid_full"] = df["mortgage_amount_updated"].eq(0).map({False: "no", True: "yes"})

>>> df
   name  mortgage_amount  month  mortgage_amount_updated paid_full
0  mark              400      1                        0       yes
1  mark              500      2                        0       yes
2  mark              200      3                      100        no