我有一个带有一些值的数据框,我需要检查一些条件是否符合某一组行之前和之后的行,如果是,则创建一个带有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设置的值。
答案 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