gpt4 book ai didi

Python- Pandas 按列值的升序减去列值

转载 作者:行者123 更新时间:2023-12-05 01:23:18 29 4
gpt4 key购买 nike

有一个数据框 mortgage_data,列名称为 mortgage_amount 和 month(按升序排列)

mortgage_amount_paid = 1000

抵押数据:

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

如何在数据框中逐行使用 mortgage_amount_paid 按升序或月份扣除和更新 mortgage_amount并添加一列 paid_status 如果 mortgage_amount_paid 已完全扣除该金额,则为 yes,否则为 no

如果 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

例如:

如果 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。付费状态应该是付费的,零,零。我得到报酬,部分,零

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=1 paid_status 应该是部分、零、零。我得到部分零,零,零

最佳答案

你可以写一个函数:

def new(mortgage_amount_paid, df):
m = df.mortgage_amount.cumsum()
n = mortgage_amount_paid
df['paid_status'] = np.where(m < n, 'full',
np.where(m - n < df.mortgage_amount, 'partial', 'zero'))
return df # You do not have to since it does inplace replacement


new(600, df)
name mortgage_amount month paid_status
0 mark 400 1 full
1 mark 500 2 partial
2 mark 200 3 zero

new(1000, df)
name mortgage_amount month paid_status
0 mark 400 1 full
1 mark 500 2 full
2 mark 200 3 partial

new(100, df)
name mortgage_amount month paid_status
0 mark 400 1 partial
1 mark 500 2 zero
2 mark 200 3 zero

new(2000, df)
name mortgage_amount month paid_status
0 mark 400 1 full
1 mark 500 2 full
2 mark 200 3 full

关于Python- Pandas 按列值的升序减去列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72621115/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com