如何使用python apply/lambda/shift函数根据2列的值获取该特定列的前一行值?
我有两列(FN1和FN2),根据这些我必须再创建一列(最终)如何使用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 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
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
。我尝试使用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