如何修改满足条件的值下一行的值?

How to modify values which are one row below the values that meet a condition?

是否有一种有效的方法可以在后续条目中满足条件时更改前一行的值?具体来说,我想知道是否有办法修改 pandas.where 以在条件测试之前或之后修改一行中的条目。假设

Data={'Energy':[12,13,14,12,15,16],'Time':[2,3,4,2,5,6]}    
DF = pd.DataFrame(Data)

DF
Out[123]: 
   Energy  Time
0      12     2
1      13     3
2      14     4
3      12     2
4      15     5
5      16     6

如果我想在 Time <= 2 时将 Energy 的值更改为 'X',我可以做类似的事情。

DF['ENERGY']=DF['ENERGY'].where(DF['TIME'] >2,'X')

DF.loc[DF['Time']<=2,'Energy']='X' 

哪个会输出

    Energy  Time
0      X     2
1     13     3
2     14     4
3      X     2
4     15     5
5     16     6

但是,如果我想在 Time <=2 之后的行中更改 'Energy' 的值,以便输出实际上是。

    Energy  Time
0     12     2
1      X     3
2     14     4
3     12     2
4      X     5
5     16     6

是否有针对此问题的矢量化方法的简单修改?

使用 Series.shift 将值向下移动一行,然后进行比较:

df.loc[df['Time'].shift() <= 2, 'Energy'] = 'X'
df

  Energy  Time
0     12     2
1      X     3
2     14     4
3     12     2
4      X     5
5     16     6

旁注:我假设 'X' 实际上是其他东西,但仅供参考,混合字符串和数字数据会导致 object 类型的列,这是已知的 pandas anti-pattern.