【问题标题】:Comparing value with previous row in Pandas DataFrame将值与 Pandas DataFrame 中的前一行进行比较
【发布时间】:2020-11-16 09:21:56
【问题描述】:
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 DataFrame,我想创建另一列来比较 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 

谢谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    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?或者运营商>= 也可以工作?
    • 感谢您的及时回复。另一个快速的问题是:如果我想将行值与自定义操作进行比较怎么办?如果一行的值比上一行的值大 20%,就说打印“True”?
    • @adirabargil - gt 就像>,因为=> 被使用ge
    • @NovaPoi - 20% 您是否需要 20% 的值并进行比较?不明白,我觉得应该是新问题。
    • @NovaPoi - 或者需要df['match'] = df['col1'].gt(df['col1'].mul(0.2).shift(-1, fill_value=-1))
    猜你喜欢
    • 2017-05-14
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多