Python 按面板数据的id选择最后一行,并使用np.where

Python 按面板数据的id选择最后一行,并使用np.where,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我想通过id选择最后一个位置,并检查变量fecha(分配给年度和季度的变量)是否大于252,以便在np中使用 id clae6 year quarter fecha fecha_dif2 position 1 475230.0 2007 1 220 -1 1 1 475230.0 2007 2 221 -1

我想通过id选择最后一个位置,并检查变量
fecha
(分配给年度和季度的变量)是否大于252,以便在np中使用

        id     clae6  year    quarter   fecha   fecha_dif2   position 
         1  475230.0  2007          1     220          -1       1
         1  475230.0  2007          2     221          -1       2
         1  475230.0  2007          3     222          -1       3
         1  475230.0  2007          4     223          -1       4 
         1  475230.0  2008          1     224          -1       5
         2  475230.0  2007          1     220          -1       1
         2  475230.0  2007          2     221          -1       2
         2  475230.0  2007          3     222          -1       3
         2  475230.0  2007          4     223          -1       4
         2  475230.0  2008          1     224          -1       5
         3  475230.0  2010          1     232          -1       1
         3  475230.0  2010          2     233          -1       2
         3  475230.0  2010          3     234          -1       3 
         3  475230.0  2010          4     235          -1       4
         3  475230.0  2011          1     236          -1       5
         3  475230.0  2011          2     237          -1       6
先与一起使用,然后比较:

mask = df.groupby('id')['fecha'].tail(1) > 252
#same as
#mask = df.groupby('id')['fecha'].tail(1).gt(252)
print (mask)
4     False
9     False
15    False
Name: fecha, dtype: bool
如果需要与df相同大小的遮罩,请添加:


先与一起使用,然后比较:

mask = df.groupby('id')['fecha'].tail(1) > 252
#same as
#mask = df.groupby('id')['fecha'].tail(1).gt(252)
print (mask)
4     False
9     False
15    False
Name: fecha, dtype: bool
如果需要与df相同大小的遮罩,请添加:



groupby

df.drop_duplicates(['id'],keep='last').fecha.gt(252)
Out[213]: 
4     False
9     False
15    False
Name: fecha, dtype: bool

df['fechatest']=df.drop_duplicates(['id'],keep='last').fecha.gt(252)
df.fillna(False)
Out[216]: 
    id     clae6  year  quarter  fecha  fecha_dif2  position  fechatest
0    1  475230.0  2007        1    220          -1         1      False
1    1  475230.0  2007        2    221          -1         2      False
2    1  475230.0  2007        3    222          -1         3      False
3    1  475230.0  2007        4    223          -1         4      False
4    1  475230.0  2008        1    224          -1         5      False
5    2  475230.0  2007        1    220          -1         1      False
6    2  475230.0  2007        2    221          -1         2      False
7    2  475230.0  2007        3    222          -1         3      False
8    2  475230.0  2007        4    223          -1         4      False
9    2  475230.0  2008        1    224          -1         5      False
10   3  475230.0  2010        1    232          -1         1      False
11   3  475230.0  2010        2    233          -1         2      False
12   3  475230.0  2010        3    234          -1         3      False
13   3  475230.0  2010        4    235          -1         4      False
14   3  475230.0  2011        1    236          -1         5      False
15   3  475230.0  2011        2    237          -1         6      False

groupby

df.drop_duplicates(['id'],keep='last').fecha.gt(252)
Out[213]: 
4     False
9     False
15    False
Name: fecha, dtype: bool

df['fechatest']=df.drop_duplicates(['id'],keep='last').fecha.gt(252)
df.fillna(False)
Out[216]: 
    id     clae6  year  quarter  fecha  fecha_dif2  position  fechatest
0    1  475230.0  2007        1    220          -1         1      False
1    1  475230.0  2007        2    221          -1         2      False
2    1  475230.0  2007        3    222          -1         3      False
3    1  475230.0  2007        4    223          -1         4      False
4    1  475230.0  2008        1    224          -1         5      False
5    2  475230.0  2007        1    220          -1         1      False
6    2  475230.0  2007        2    221          -1         2      False
7    2  475230.0  2007        3    222          -1         3      False
8    2  475230.0  2007        4    223          -1         4      False
9    2  475230.0  2008        1    224          -1         5      False
10   3  475230.0  2010        1    232          -1         1      False
11   3  475230.0  2010        2    233          -1         2      False
12   3  475230.0  2010        3    234          -1         3      False
13   3  475230.0  2010        4    235          -1         4      False
14   3  475230.0  2011        1    236          -1         5      False
15   3  475230.0  2011        2    237          -1         6      False

你在找这个吗
df.groupby('id')。tail(1)
你在找这个吗<代码>df.groupby('id').tail(1)谢谢你,我认为这可能会奏效,现在我想把这个numpy组合起来,其中你的结果是无效的语法,df['exitr']=np.where((df['fecha_dif_2']<-8)和(df['fecha']<253));(df['fechatest'='True')&(df['fecha']<253)),1,0)
np.where((df'fecha'dif'<253'))|(df['fechatest']&(df['fecha']<253)),1,0)
df['fechatest']dtype是布尔值,为真或假,因此无需再次执行。在你的计算中直接使用这个列谢谢,我想这可能会起作用,现在我想把这个numpy组合起来,你的结果,但是我得到了一个无效的语法,df['exitr']=np.where((df['fecha'u dif_2']<-8)和(df['fecha']<253))(df['fechatest']=True')&(df['fecha']<253)),1,0)
np.where((df['fecha'u-dif'>2']<8)和(df['fecha']<253]|(df['fechatest']&(df['fecha']<253)),1,0)
df['fechatest']dtype是布尔值,它是真的或假的,所以您无需再次执行。只需在计算中直接使用该列即可