Python 按面板数据的id选择最后一行,并使用np.where
我想通过id选择最后一个位置,并检查变量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
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是布尔值,它是真的或假的,所以您无需再次执行。只需在计算中直接使用该列即可