Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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 apply/lambda/shift函数根据2列的值获取该特定列的前一行值?_Python_Pandas_Dataframe - Fatal编程技术网

如何使用python apply/lambda/shift函数根据2列的值获取该特定列的前一行值?

如何使用python apply/lambda/shift函数根据2列的值获取该特定列的前一行值?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两列(FN1和FN2),根据这些我必须再创建一列(最终) FN1 FN2 Final False False 1 True True 1 False False 1 True False 2 True True 2 False False 1 True True 1 True True 1 如果FN1为False,则Final将为1 FN1 FN2 Final False

我有两列(FN1和FN2),根据这些我必须再创建一列(最终)

FN1     FN2    Final
False   False   1
True    True    1
False   False   1
True    False   2
True    True    2
False   False   1 
True    True    1
True    True    1
  • 如果FN1为False,则Final将为1

  • FN1     FN2    Final
    False   False   1
    True    True    1
    False   False   1
    True    False   2
    True    True    2
    False   False   1 
    True    True    1
    True    True    1
    
  • 如果FN2为真,我将是Final的上一个值

  • FN1     FN2    Final
    False   False   1
    True    True    1
    False   False   1
    True    False   2
    True    True    2
    False   False   1 
    True    True    1
    True    True    1
    
  • 但是如果FN2为False,我需要用之前的值 最终+1(即增加1)

  • FN1     FN2    Final
    False   False   1
    True    True    1
    False   False   1
    True    False   2
    True    True    2
    False   False   1 
    True    True    1
    True    True    1
    
。我尝试使用
shift()
来执行此操作,但在这种情况下同样没有帮助

FN1     FN2    Final
False   False   1
True    True    1
False   False   1
True    False   2
True    True    2
False   False   1 
True    True    1
True    True    1
FN1     FN2    Final
False   False   1
True    True    1
False   False   1
True    False   2
True    True    2
False   False   1 
True    True    1
True    True    1

使用
np。选择

FN1     FN2    Final
False   False   1
True    True    1
False   False   1
True    False   2
True    True    2
False   False   1 
True    True    1
True    True    1
df1 = df.shift()

cond1 = df['FN1'] == False
cond2 = (df['FN1']==True) & (df['FN2'] ==True)
cond3 = (df['FN1']==True) & (df['FN2'] == False)

df['Final'] = np.select([cond1,cond2,cond3], [1, df1['Final'], df1['Final']+1])

print(df)
使用lambda:

FN1     FN2    Final
False   False   1
True    True    1
False   False   1
True    False   2
True    True    2
False   False   1 
True    True    1
True    True    1
df = pd.DataFrame({'FN1': [False, True, False, True, True, False, True, True],
                   'FN2': [False, True, False, False, True, False, True, True]
                   })

def f(fn1, fn2):
    global previousfinal
    previousfinal = 1 if not fn1 else previousfinal + 1 if not fn2 else previousfinal
    return previousfinal

previousfinal = 1
df['Final'] = df[['FN1', 'FN2']].apply(lambda x: f(*x), axis=1)
print(df)

在应用逻辑后,您的输入数据帧和输出是相同的。我的输入df有两列FN1和FN2。根据条件,我的输出df应该还有一列“Final”。这不符合预期。第一次遇到cond3时,它将值增加1。但在遇到cond2之后,它将值存储为1,而不是2(现在是上一行的值)。它给出以下输出FN1 FN2 Final False 1 True 1 False 1 True 2 True 1 False 1 True 2 True 1 False 1 True 1 True 1 True 1