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

时间:2019-05-08 02:53:52

标签: python pandas dataframe replace where

是否有一种有效的方法可以在后续条目中满足条件时更改前一行的值?具体来说,我想知道是否有任何条件可以在条件测试之前或之后修改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

如果我想在时间<= 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

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

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

对矢量化方法是否有简单的修改?

1 个答案:

答案 0 :(得分:3)

使用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类型的列,这是已知的熊猫反模式。