有一个数据框mortgage_data,其中列名称为mortgage_amount 和month(按升序排列)
mortgage_amount_paid = 1000
抵押数据:
name mortgage_amount month
mark 400 1
mark 500 2
mark 200 3
如何扣除和更新mortgage_amount
按升序或月份使用mortgage_amount_paid
数据框中逐行
并添加一列paid_status
如果 Mortgage_amount_paid 已完全扣除该金额,则为“是”;如果不是这样,则为“否”
if mortgage_amount_paid = 1000
抵押数据:
name mortgage_amount month mortgage_amount_updated paid_status
mark 400 1 0 full
mark 500 2 0 full
mark 200 3 100 partial
ex:
if mortgage_amount_paid = 600
抵押数据:
name mortgage_amount month mortgage_amount_updated paid_status
mark 400 1 0 full
mark 500 2 300 partial
mark 200 3 200 zero
尝试过这个:
mortgage_amount_paid = 600
# amount saved - debt
m1 = df['mortgage_amount'].cumsum().sub(mortgage_amount_paid)
# is it positive?
m2 = m1>0
# is the previous month also positive?
m3 = m2.shift(fill_value=False)
df['mortgage_amount_updated'] = (m1.clip(0, mortgage_amount_paid)
.mask(m3, df['mortgage_amount'])
)
df['paid_status'] = np.select([m3, m2], ['zero', 'partial'], 'full')
错误:我已经给出mortgage_amount_paid=400。已付费状态应为已付费,零,零。我得到报酬,部分,零
and
mortgage_amount_paid = 600
m = df['mortgage_amount'].cumsum()
df['paid_status'] = np.select(
[m <= mortgage_amount_paid,
(m > mortgage_amount_paid) & (m.shift() < mortgage_amount_paid)
],
['full', 'partial'],
default='zero'
)
df['mortgage_amount_updated'] = np.select(
[df['paid_status'].eq('full'),
df['paid_status'].eq('partial')],
[0, m-mortgage_amount_paid],
default=df['mortgage_amount']
)
错误:如果mortgage_amount_paid=1paid_status应该是partial,zero,zero。我得到部分零,零,零