数据库为rv 列是“ NextResetDate_rv”(日期时间),“ RateResetFreq_rv”(时间增量) me1是pd.to_datetime('12 / 31/2019')
我正在尝试根据条件创建一个新列'resetcalc1_rv',但无法正确编写代码,请指出错误之处
只要'rvresetcalc1_rv'基本上等于'NextResetDate_rv',只要它在2019年12月31日后落入,否则必须添加'RateResetFreq_rv'直到满足条件
rv['resetcalc1_rv'] = rv['NextResetDate_rv']
def new1(row):
while row['resetcalc1_rv'] < me1:
row['resetcalc1_rv'] = row['NextResetDate_rv'] + row['RateResetFreq_rv']
if row['resetcalc1_rv'] >= me1:
break
row['resetcalc1_rv']
rv['resetcalc1_rv'] = rv.apply(lambda row:new1(row), axis=1)
现在所有行的输出均为“无”
答案 0 :(得分:2)
您可以避免while循环。使用减法和整数除法,您可以找到需要满足每行条件的'RateResetFreq_rv'
单位。 clip(lower=0)
确保我们不更改指定日期之后的日期。然后,您可以一次计算所有值。
import pandas as pd
df = pd.DataFrame({'NextResetDate_rv': pd.date_range('2019-11-01', periods=8, freq='15D'),
'RateResetFreq_rv': pd.to_timedelta(np.arange(31,23,-1), unit='D')})
s = (((pd.to_datetime('2019-12-31') - df['NextResetDate_rv']).dt.days)//df['RateResetFreq_rv'].dt.days).add(1).clip(lower=0)
df['resetcalc1_rv'] = df['NextResetDate_rv'] + s*df['RateResetFreq_rv']
NextResetDate_rv RateResetFreq_rv resetcalc1_rv
0 2019-11-01 31 days 2020-01-02
1 2019-11-16 30 days 2020-01-15
2 2019-12-01 29 days 2020-01-28
3 2019-12-16 28 days 2020-01-13
4 2019-12-31 27 days 2020-01-27
5 2020-01-15 26 days 2020-01-15
6 2020-01-30 25 days 2020-01-30
7 2020-02-14 24 days 2020-02-14