按列值的升序减去列值
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
有一个数据框 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