Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用现有列将lambda应用于新列_Python_Pandas_Loops_Lambda - Fatal编程技术网

Python 使用现有列将lambda应用于新列

Python 使用现有列将lambda应用于新列,python,pandas,loops,lambda,Python,Pandas,Loops,Lambda,数据库是rv 列为“NextResetDate_rv”(日期时间)、“RateResetFreq_rv”(时间增量) me1为截止日期时间(2019年12月31日) 我正试图根据一个条件创建一个新列“resetcalc1_rv”,但无法获得正确的代码,请您指出错误所在 基本上,“rvresetcalc1_rv”应等于“NextResetDate_rv”,只要它在2019年12月31日之后,否则需要添加“RateResetFreq_rv”,直到满足条件为止 rv['resetcalc1_rv']

数据库是rv 列为“NextResetDate_rv”(日期时间)、“RateResetFreq_rv”(时间增量) me1为截止日期时间(2019年12月31日)

我正试图根据一个条件创建一个新列“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)
rv['resetcalc1_rv']=rv['NextResetDate_rv']
def new1(世界其他地区):
当第['resetcalc1_rv']行小于me1时:
行['resetcalc1_-rv']=行['NextResetDate_-rv']+行['RateResetFreq_-rv']
如果行['resetcalc1_rv']>=me1:
打破
第['resetcalc1_rv'行]
rv['resetcalc1_rv']=rv.apply(λ行:新1(行),轴=1)

现在所有行的输出都是“无”

您可以避免while循环。使用减法和整数除法,您可以找到需要添加到每行以满足条件的
'RateResetFreq\u rv'
单位数。
clip(lower=0)
确保我们不会更改已经在指定日期之后的日期。然后可以一次计算所有值

样本数据 代码 输出
您可以避免while循环。使用减法和整数除法,您可以找到需要添加到每行以满足条件的
'RateResetFreq\u rv'
单位数。
clip(lower=0)
确保我们不会更改已经在指定日期之后的日期。然后可以一次计算所有值

样本数据 代码 输出
嘿,RateResetFreq是现有的预定义列,我无法重新定义it@LabeebNazim我不是。。。你没有提供样本数据,所以我编了一些。鉴于现有列
'NextResetDate\u rv'
'RateResetFreq\u rv'
,我只计算
'resetcalc1\u rv'
嘿,RateResetFreq是现有的预定义列,我无法重新定义it@LabeebNazim我不是。。。你没有提供样本数据,所以我编了一些。考虑到现有的列
'NextResetDate\u rv'
'RateResetFreq\u rv'
,我只计算
'resetcalc1\u rv'
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