如何在python中有条件地选择前一行的值?

2024-04-19 08:57:24 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
2条回答

你可以试试这个:

df['Prev_Value']=np.where(dataframe['Marker'].diff()==1,dataframe['Value'].shift(1, axis = 0),np.nan)

输出:

df

   Value  Marker  Prev_Value
0     10       0   NaN
1     12       0   NaN
2     50       1  12.0
3     42       1   NaN
4     52       0   NaN
5     23       1  52.0

如果要获取上一个非1标记值,如果marker==1,可以尝试以下操作:

prevro=[]
for i in reversed(df.index):

    if df.iloc[i,1]==1:
        prevro_zero=df.iloc[0:i,0][df.iloc[0:i,1].eq(0)].tolist()
        if len(prevro_zero)>0:
            prevro.append(prevro_zero[len(prevro_zero)-1])
        else:
            prevro.append(np.nan)
    else:
        prevro.append(np.nan)
        
df['Prev_Value']=list(reversed(prevro))

print(df)

输出:

   Value  Marker  Prev_Value
0     10       0         NaN
1     12       0         NaN
2     50       1        12.0
3     42       1        12.0
4     52       0         NaN
5     23       1        52.0
condition = (df.Marker.shift() == 0) & (df.Marker == 1)
df['Prev_Value'] = np.where(condition, df.Value.shift(), np.nan)

输出:

df
   Value  Marker  Prev_Value
0     10       0         NaN
1     12       0         NaN
2     50       1        12.0
3     42       1         NaN
4     52       0         NaN
5     23       1        52.0

相关问题 更多 >