是否有一种有效的方法可以在后续条目中满足条件时更改前一行的值?具体来说,我想知道是否有任何条件可以在条件测试之前或之后修改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
对矢量化方法是否有简单的修改?
答案 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
类型的列,这是已知的熊猫反模式。