【问题标题】:Accessing Rows Before and After rows of interest in Pandas Dataframe在 Pandas Dataframe 中访问感兴趣的行之前和之后的行
【发布时间】:2020-04-12 17:16:27
【问题描述】:

我有一个包含一些值的数据框,我需要检查某组行的前行和后行是否满足某些条件,如果满足,则创建一个具有真/假的新列。我如何实现这一目标?

数据框

  ------------------------------------------------------------------
  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。

b.如果不是,那么我们检查下面的直接行是否 == age2。因此,如果 age == age2 用于下面的直接行 -> flag is TRUE

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

【问题讨论】:

标签: python pandas numpy dataframe scipy


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 2017-06-28
    • 2021-09-25
    • 1970-01-01
    • 2021-01-05
    • 2011-08-10
    • 1970-01-01
    • 2016-04-27
    • 2020-08-12
    相关资源
    最近更新 更多