在Pandas DataFrame中比较当前行与前一行的值

3
import pandas as pd
data={'col1':[1,3,3,1,2,3,2,2]}
df=pd.DataFrame(data,columns=['col1'])
print df


     col1  
0     1          
1     3          
2     3          
3     1          
4     2          
5     3          
6     2          
7     2      

我有以下的 Pandas 数据帧,我想创建另一列来比较 col1 的前一行,看看该行的值是否大于前一行的值。应该像下面这样显示:
    col1  match  
0     1   False     
1     3   False     
2     3   True     
3     1   False     
4     2   False     
5     3   True     
6     2   False     
7     2   True 

谢谢。

1个回答

1

使用Series.gtSeries.shift比较移位后的值,最后一个缺失值被替换为-1,如果所有值都是正数,则有效。

df['match'] = df['col1'].gt(df['col1'].shift(-1, fill_value=-1))
print (df)

   col1  match
0     1  False
1     3  False
2     3   True
3     1  False
4     2  False
5     3   True
6     2  False
7     2   True

如果需要将任何数据框(Dataframe)的最后一个值设置为True:
df['match'] = df['col1'].gt(df['col1'].shift(-1))
df.loc[df.index[-1], 'match'] = True
    

它只能使用 gt 吗?还是运算符 >= 也可以使用? - adir abargil
谢谢您的及时回复。这里还有一个快速问题:如果我想使用自定义操作比较行值怎么办?例如,如果一行的值比上一行高出20%,则打印“True”怎么处理? - NovaPoi
@adirabargil - gt 就像 >,而 => 则使用 ge - jezrael
@NovaPoi - 20% 您需要从值中获取20%并进行比较吗?我不理解,我认为这应该是一个新问题。 - jezrael
@NovaPoi - 还是需要 df['match'] = df['col1'].gt(df['col1'].mul(0.2).shift(-1, fill_value=-1)) 吗? - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接