访问Pandas Dataframe中感兴趣的行之前和之后的行

时间:2018-06-14 10:53:34

标签: python pandas numpy dataframe scipy

我有一个带有一些值的数据框,我需要检查一些条件是否符合某一组行之前和之后的行,如果是,则创建一个带有true / false的新列。我如何实现这一目标?

数据帧

  ------------------------------------------------------------------
  name       age          school      age2      salary       company
  ------------------------------------------------------------------
  Tina                                 24        2500          GHJ 
  -----------------------------------------------------------------                         
  Tina       24            York
  -----------------------------------------------------------------        
  Tina                                 24        2600         GHJ
  -----------------------------------------------------------------
  Sally                                24        2700         OPS
  -----------------------------------------------------------------
  Sally                                null      2700         OPS
  -----------------------------------------------------------------
  Sally      23           leeds                 
  -----------------------------------------------------------------
  Sally                                 23       2700         OPS
  ----------------------------------------------------------------- 

我想要生成此数据框

  --------------------------------------------------------------------
  name       age     school      age2      salary       company  flag
  --------------------------------------------------------------------
  Tina                            24        2500             GHJ 
  ---------------------------------------------------------------------                        
  Tina       24            York                                    FALSE
  --------------------------------------------------------------------        
  Tina                             24        2600         GHJ
  -----------------------------------------------------------------
  Sally                            24        2700         OPS
  -----------------------------------------------------------------
  Sally                           null      2700          OPS
  -----------------------------------------------------------------
  Sally      23           leeds                                    TRUE 
  -----------------------------------------------------------------
  Sally                            23       2700           OPS
  -----------------------------------------------------------------      

一个。这背后的逻辑是对于age不为null的每一行,我们检查age2上面的直接行是否等于当前年龄。 如果是这样,我们将标志设置为false。

湾如果没有,那么我们检查下面的直接行== age2。所以年龄== age2以下的直接行 - > flag为TRUE。

请注意,当我的意思是立即时,我们正在寻找age2的下一个和前一个非null值。如果age2为null,那么我们进一步向上/向下查看为age2设置的值。

1 个答案:

答案 0 :(得分:0)

df.loc[:,'flag'] = (~(df.loc[:,'age'] is None)&(df.loc[:,'age']==df.loc[:,'age2'].shift(-1)))&(df.loc[:,'age']!=df.loc[:,'age2'].shift(1))
df.loc[pd.isnull(df.loc[:,'age']),'flag'] = None